jQuery不会使用称为option的节点来分析xml

我正在使用jQuery来parsing一些XML,如下所示:

function enumOptions(xml) { $(xml).find("animal").each(function(){ alert($(this).text()); }); } enumOptions("<root><animal>cow</animal><animal>squirrel</animal></root>"); 

这很好。 但是,如果我尝试寻找称为“选项”的节点,那么它不起作用:

 function enumOptions(xml) { $(xml).find("option").each(function(){ alert($(this).text()); }); } enumOptions("<root><option>cow</option><option>squirrel</option></root>"); 

没有错误,只是没有得到警报,就好像找不到任何东西。 它只为节点调用选项我testing的其他所有工作正常!

我正在使用当前版本的jQuery – 1.4.2。

任何人的想法?

TIA。

BG

更新

jQuery现在已经内置了这个方法。 您可以使用

 $.parseXML("..") 

从一个string构造XML DOM。


jQuery依赖于使用innerHTML的HTML DOMparsing标签名称与HTML中的标签名称相冲突时可能会有不可靠结果的文档。

相反,您可以使用适当的XMLparsing器首先parsing文档,然后使用jQuery进行查询。 下面的方法将以跨浏览器的方式parsing一个有效的XML文档:

 // http://www.w3schools.com/dom/dom_parser.asp function parseXML(text) { var doc; if(window.DOMParser) { var parser = new DOMParser(); doc = parser.parseFromString(text, "text/xml"); } else if(window.ActiveXObject) { doc = new ActiveXObject("Microsoft.XMLDOM"); doc.async = "false"; doc.loadXML(text); } else { throw new Error("Cannot parse XML"); } return doc; } 

一旦构buildXML DOM,jQuery就可以像正常一样使用了 – http://jsfiddle.net/Rz7Uv/

 var text = "<root><option>cow</option><option>squirrel</option></root>"; var xml = parseXML(text); $(xml).find("option"); // selects <option>cow</option>, <option>squirrel</option> 

这可能是HTML <option>元素的一些特殊处理,但在源代码中找不到。

对于1.4.2的无信号来源4448线是罪魁祸首:

 // ( div = a div node ) // ( elem = the xml you've passed to it ) div.innerHTML = wrap[1] + elem + wrap[2]; 

考虑这个代码:

 var d = document.createElement('div'); d.innerHTML = "<foo><option>bar</option><b>blah</b></foo>"; alert(d.innerHTML); // <foo>bar<b>blah</b></foo> // tested on Firefox 3.6 

所以,不要问我为什么,但是它看起来像DOM处理它的方式,不一定是jQuery的错。

也许只是使用不同的节点名称?