Jquery XML ie8无法正常工作

时间:2011-11-23 06:44:35

标签: jquery xml internet-explorer-8

我正在使用jquery 1.6.2。我的ie控制台中显示的错误是对方法或属性访问的意外调用。 jquery.min.js,第17行,字符29094。

我在所有现代浏览器上进行了测试,它在控制台上没有任何错误就完美地工作,但是在尝试使用ie8时,我的xml文件没有加载。我的ajax调用是OKAY,因为selectXml可以运行,但不是里面的代码(它应该没有任何问题,因为它在其他浏览器上工作,我已经进行了XML验证),已经挣扎了好几个小时。我认为ie8与jquery无法正常工作。

$(document).ready(function() {  
 $.ajax({
    type: "GET",
    url: "menu.xml",
    dataType:"text",
    success: selectXml
});

(我的selectXml函数)

function selectXml (xml) {

    var xmlDoc = $.parseXML(xml);
    console.log(xmlDoc);
    var i = 0,
    j = 0,
    k = 0,
    l = 0,  
    maxCat = $(xmlDoc).find("categorie").length,
    maxPage = 14,
    numPlate = 0,
    numSection = 2,
    page = 0,
    queryXml,
    title,
    theNo, 
    thePlate,
    thePrice,  
    theSection;

    //for each page divide it in 2 sections
    for(i=1; i<=maxPage; i++){
        if( j < maxCat){
        //for each sections add the title and left, right section

            //for each left right section, fill up the dishes
            for(k=0; k<numSection; k++){

                queryXml = $(xmlDoc).find('categorie').eq(j);


                title = queryXml.find("title[lang=" + jQuery.fn.language + "]").text();
                numPlate = queryXml.find('plate').length;
                $('#menu'+ i).append('<section></section>');
                $('section').eq(j).append('<div class="menuTitle"><h1>'+ title +'</h1><div class="ribbon"></div></div><div class="menuLeft"><ul></ul></div><div class="menuRight"><ul></ul></div>');
                theSection = $('section').eq(j);

                for(l=0; l<numPlate; l++){
                    if(l< (numPlate/2)){
                        theNo = queryXml.find('plate').eq(l).find('number').text();
                        thePrice = queryXml.find('plate').eq(l).find('price').text();
                        thePlate = queryXml.find('plate').eq(l).find('description[lang='+jQuery.fn.language+']').text();
                        //console.log(thePlate);
                        $('section').eq(j).find('.menuLeft ul').append('<li><span class="itemNumber">' + theNo +'</span><span class="itemName">'+ thePlate+'</span> <span class="itemPrice">'+ thePrice+'</span></li>');


                    }
                    else {
                        theNo = queryXml.find('plate').eq(l).find('number').text();
                        thePrice = queryXml.find('plate').eq(l).find('price').text();
                        thePlate = queryXml.find('plate').eq(l).find('description[lang='+jQuery.fn.language+']').text();
                        $('section').eq(j).find('.menuRight ul').append('<li><span class="itemNumber">' + theNo +'</span><span class="itemName">'+ thePlate+'</span> <span class="itemPrice">'+ thePrice+'</span></li>');
                    }


                };


                    numPlate = $(this).find('plate').length;

                j++;

            }

        }//end if
    }//end for



}

3 个答案:

答案 0 :(得分:1)

另一种方法是让IE8首先通过在您的页面中包含类似Modernizr(http://modernizr.com/)的内容来理解html5元素。然后让剩下的就像我们期望的那样运行。

答案 1 :(得分:0)

问题出在附加代码中,我将section用作容器。 ie8可能不理解它,这就是为什么它甚至没有显示信息,当你做警告它正确显示我的xml的内容...多么糟糕。变形IE ...这是我的解决方案,用一些类替换div到div。 经验教训:当使用jquery更改dom时,不要使用html5元素

答案 2 :(得分:0)

我在下面使用此代码,它对我有用。我测试IE8,IE9,chrome,ff都没有问题!

// XML content look like this
<root>
    <publish>
        <store>
            <book title="How to fix IE"/>
            <book title="...."/>
        </store>
    </publish>
</root>


// Build XML document
var xDoc = $.parseXML(strXml);

// create new child element using XML Document
var xBook = xDoc.createElement("book");
xBook.setAttribute("title", "How to fix bad ass IE!");
// or you can using jquery
$(xBook).attr("authr", "Bill ...");

// Append child element to some where in XML Document
var xStore = $(xDoc).find("store");
xStore.append(xBook);