【问题标题】:XML Parsing with Jquery for IE7+ and Mozilla使用 Jquery 为 IE7+ 和 Mozilla 进行 XML 解析
【发布时间】: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


【解决方案1】:

不要使用 jQuery 的主要 $() 函数来解析 XML。它尝试使用 HTML 元素的内置 innerHTML 属性将 XML 解析为 HTML,该属性无法正常工作,但足以使人们陷入一种虚假的安全感。请改用parseXML()

var xmlDoc = $.parseXML(xml);

$(xmlDoc).find("cell").each(function () {
    alert( $(this).attr('id') );
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多