我使用下面的代码迭代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
}
请让我知道如何更正代码以使其在上述情况下也能正常工作......
答案 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')
答案 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/