Javascript 遍历XML元素在IE8中不起作用

Javascript 遍历XML元素在IE8中不起作用,javascript,jquery,xml,internet-explorer-8,Javascript,Jquery,Xml,Internet Explorer 8,我是javascript的新手,但以下是我要做的。请注意,我四处寻找答案,但没有任何帮助 我正在尝试遍历XML元素,但它在IE8中不起作用。不过,它在Firefox中运行良好。我所说的不工作是指即使存在元素,它也不会进入循环内部 这是我尝试遍历的XML: var $anXml = $('<node id="anID" inline="0" leaf="true">' +'<sub_node1>Text \(more text\)<

我是javascript的新手,但以下是我要做的。请注意,我四处寻找答案,但没有任何帮助

我正在尝试遍历XML元素,但它在IE8中不起作用。不过,它在Firefox中运行良好。我所说的不工作是指即使存在元素,它也不会进入循环内部

这是我尝试遍历的XML:

var $anXml = $('<node id="anID" inline="0" leaf="true">'
                  +'<sub_node1>Text \(more text\)</sub_node1>'
                  +'<sub_node2>Text \(more text\)</sub_node2>'
             +'</node>');
alert('children before loop: ' + $anXml.children.length);
$anXml.children().each(function() {
    alert('child traversed!');
    var $aChild = $(this);
    $anotherXml.data(this.nodeName.toLowerCase(), $aChild.html());
});
alert('children after loop: ' + $anXml.children.length);
以下是警报的输出:

children before loop: 2
children after loop: 2
“孩子穿越了!”永远不会显示


任何想法都将不胜感激。

如果
$anXml.children.length
起作用,它不是一个jQuery对象,因为它是本机元素的属性,而不是jQuery,因此您必须将其包装:

$($anXml).children().each(function() {
    alert('child traversed!');
    var $aChild = $(this);
    $anotherXml.data(this.nodeName.toLowerCase(), $aChild.html());
});

没用。我注意到它适用于其他文档。我想知道这是否与我的anXml的结构方式有关。在您尝试使用它之前,XML是用$.parseXML解析的吗?它是有效的XMLNo。我只是使用.attr访问一些属性。XML就是我上面提到的,我相信这是一个有效的XML,它可以在FireFox中使用。如果它无效,它在FireFox中会工作吗?在循环显示“undefined”后发出警报($anotherXml.data('sub_node1'))。不确定这是否有助于理解正在发生的事情。我必须使用$.parseXML()才能使用JQuery函数,例如.find()。但是,循环仍然不起作用。请注意,我必须创建一个字符串XML,将其传递给$.parseXML(),然后将其包装。也就是说,我遵循jQuery.parseXML()文档。