【发布时间】:2012-04-24 19:17:33
【问题描述】:
我一直在开发一个需要在 jquery 中解析我的 xml 的 Web 应用程序。我正在构建我的网络应用程序以在 IE7 到 IE10 和 mozilla 上工作。我想迭代到我的 xml,所以我写了下面的代码。
<script type='text/javascript' src="jquery/jquery-1.7.1.min.js"></script>
<script type="text/javascript" language="javascript">
var xml = '<root><cell id="1"> </cell><cell id="2"> </cell></root>';
//works in ie7
$(xml).filter("cell").each(function () {
alert('ie'+$(this).attr('id'));
});
//works in mozilla
$(xml).find('cell').each(function () {
alert('mozilla'+$(this).attr('id'));
});
</script>
但我发现我需要为不同的浏览器编写不同的循环机制来从 xml 中获取。这有点奇怪,因为我使用的是 Jquery,所以它应该与所有浏览器兼容。
那么有没有更好的从 xml 读取的方法,它适用于所有浏览器,这样我就不必编写浏览器检查代码了?
【问题讨论】:
-
我认为因为 $(xml) 是 HTML DOM 而不是真正的 XML 文档 IE 无法识别诸如根和单元格之类的标签,这可能解释了为什么 find() 在 IE 上会失败,因为 IE 不会'不要将它们视为标签。
-
@gillesc 不过,这并不能解释为什么
.filter()会在 IE 中工作。 -
似乎在 IE7 中它剥离了根节点,并返回一个仅包含子元素(
cell节点)的 jQuery 对象。尝试先调用$.parseXML(xml),然后将结果传递给一个jQuery对象:var xmlDoc = $.parseXML(xml);$(xmlDoc).find('cell').each(...);。 -
@AnthonyGrist 你的逻辑工作得很好,我刚刚检查过了。谢谢我的兄弟。但这不应该由 jquery 在其最新版本中处理吗?
-
@thinkmmk 如果您将字符串传递给
jQuery()(或$())函数,它会尝试将其解析为HTML,因为这就是它的设计目的。他们没有简单的方法来检查您传递的字符串是否实际上是 XML,并将其解析为 XML,这就是为什么他们提供了一个完全独立的函数 (jQuery.parseXML()) 来执行此操作。由您自己决定是使用 HTML 还是 XML 并使用相应提供的功能。
标签: javascript jquery xml internet-explorer jquery-xml