IE可以使用jQuery操纵XML吗?

kam*_*cus 12 xml jquery parsing dom

我不想做的事:

  • 使用jQuery简单地在IE中"读取"XML.去过也做过.适用于大多数情况.
  • 通过AJAX加载XML.这是一个遗留系统,在隐藏字段中使用XML(哦,呀,宝贝!)在回发之间存储向导数据结构.重写它会很糟糕.

我想做什么:

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

我会没事的:

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

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

例证:

<!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>
Run Code Online (Sandbox Code Playgroud)

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

更新

有可能使用巫毒魔法.

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

我已经在我的github上发布了这个.如果有人有任何建议或改进,请告诉我.我已经碰到了几件事,但是当我遇到它们时,我一直在修理它们.

med*_*iev 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]-->
Run Code Online (Sandbox Code Playgroud)