IE可以使用jQuery操纵XML吗?

时间:2011-02-22 04:23:00

标签: jquery xml parsing dom

我不想做的事情:

  • 简单"阅读" IE中的XML使用jQuery。去过也做过。大部分都有效。
  • 通过AJAX加载XML。这是一个遗留系统,在隐藏字段中使用XML(哦,呀,宝贝!)在回发之间存储向导数据结构。重写它会很糟糕。

我要做的是:

  • 使用IE中的jQuery操作 XML文档
  • 使用本机jQuery功能在所有浏览器中使用相同的代码

我会对此感到满意:

  • 在操作XML DOM时,覆盖/重载相同的jquery方法以使它们在IE中工作。

它只是不起作用,我觉得使用普通的旧jQuery方法以100%的跨浏览器方式是不可能的。

案例:

<!DOCTYPE html>
<html>
<head>
    <title>IE Sucks</title>
    <script src="Scripts/jquery-1.5.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        var xml =
            '<Browsers>' +
                '<CoolBrowsers>' +
                    '<Browser name="Opera"></Browser>' +
                    '<Browser name="Chrome"></Browser>' +
                    '<Browser name="Firefox"></Browser>' +
                '</CoolBrowsers>' +
                '<BadBrowsers>' +
                    '<Browser name="IE6"></Browser>' +
                '</BadBrowsers>' +
            '</Browsers>';

        $(function () {

            $("#xml").text(xml);

            var uncoolBrowser = $("<Browser />").attr("name", "IE7");

            // In 1.5, using this...
            var $xml = $($.parseXML(xml));

            // Nope. Works everywhere else, though!
            // var $xml = $(xml);     


            // Throws a "Type mismatch"
            // Works everywhere except IE
            // This is case sensitive (??? WTF ???)
            // Lowercase "badbrowsers" nothing happens
            // Uppercase "BADBROWSERS" nothing happens
            // Best part? $xml.find("BadBrowsers").length === 1
            $xml.find("BadBrowsers").append(uncoolBrowser);

            // Only way to output XML in IE
            $("#result").text($xml[0].xml);

            // Fuggetaboutit
            // Technically, it does work in IE but not when using $.parseXML()
            // $("#result").text($("<div></div>").append($xml.clone()).html());
        });
    </script>
</head>
<body>
    <pre id="xml"></pre>
    <pre id="result"></pre>
</body>
</html>

有可能吗?这个简单的场景可以完成,还是IE只是抛弃了我们所有人? $(xml).everything等适用于FF,Opera,Chrome和Safari。

更新

可以使用伏都教魔法。

created a jQuery plugin负责协调不同浏览器处理XML之间的差异。我还在其他地方基于类似的代码创建了.xml()函数,虽然我修复了仅IE的问题。这适用于所有浏览器,IE7和IE8肯定无法测试IE6。

我已将此贴在我的github上。如果有人有任何建议或改进,请告诉我。我已经遇到过几件事情,但是当我遇到它们时,我一直在修理它们。

1 个答案:

答案 0 :(得分:0)

这更像是一个猜测,因为我不知道.parseXml会做什么,但IE需要createElement来表示未知的节点名称。您可以为要操作的每个新节点尝试document.createElement('BadBrowsers')吗?

这是HTML5的情况,这就是为什么有shiv脚本。你可以试试这个:

http://html5shiv.googlecode.com/svn/trunk/html5.js

复制它,将新节点名称附加到var z,然后:

<!--[if lt IE 9]>
<script src="file.js"></script>
<![endif]-->