我不想做的事情:
我要做的是:
我会对此感到满意:
它只是不起作用,我觉得使用普通的旧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上。如果有人有任何建议或改进,请告诉我。我已经遇到过几件事情,但是当我遇到它们时,我一直在修理它们。
答案 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]-->