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的错。
也许只是使用不同的节点名称?