为什么我无法使用此jQuery代码(IE)迭代多个XML节点

时间:2011-12-09 08:31:54

标签: jquery xml

我使用下面的代码迭代XML的多个节点,但它似乎无法正常工作

var xmlDat = $.parseXML($('#xmlText').val()); 
// Here I am reading an XML content on paste event of xmlText
var xml = $(xmlDat);
var path = xml.find('ProjectID').text();
xml.find('a,b,c,d').each(function(){
{
       // Giving unwanted results
}

但如果使用如下

xml.find('a').each(function(){
{
       // Giving results
}

请让我知道如何更正代码以使其在上述情况下也能正常工作......

2 个答案:

答案 0 :(得分:2)

它在ie9中工作正常。

在ie7中,您需要使用filter代替find,因为即外部元素的剃须,因此<root><a></a><b></b></root>实际上变为<a></a><b></b>

总而言之

xml.find('a,b,c,d').each(function(){
{
       // works in modern browsers
}


xml.filter('a,b,c,d').each(function(){
{
       // works in old ie versions
}

此处示例:http://jsfiddle.net/bUvPB/5/

另外,为了使相同的代码在所有浏览器中都能工作,首先将xml包装在虚拟元素中,然后始终使用find,这样就不需要浏览器嗅探和其他丑陋的工具来交叉浏览器兼容。

$('<div></div>').append(xml).find('a,b,c,d')

示例:http://jsfiddle.net/bUvPB/25/

答案 1 :(得分:1)

我尝试将XML文档包装在HTML元素中,它在IE7和IE8中对我有用。您的原始代码片段在IE9和其他浏览器中运行良好。这是代码:

var xmlDat = "<div><root><a></a><b></b></root></div>";
var xml = $(xmlDat);
xml.find('a,b,c,d').each(function(){
    alert('Hi'); 
});

这是jsfiddle链接http://jsfiddle.net/AyRkX/