我通过以下测试在浏览器中获得了不一致的结果:
============ test.html ===========
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
</head>
<body>
<script>
var xml;
$.ajax({
type: "GET",
url: "data.xml",
success: function(data){
var node = $("CI:first", data);
var query1 = $("T TX", node).length;
var query2 = $("T", node).find("TX").length;
var msg = '$("T TX", node).length: ' + query1;
msg += "\n";
msg += '$("T", node).find("TX").length: ' + query2;
alert(msg);
}
});
</script>
</body>
</html>
============ data.xml ===========
<?xml version="1.0" encoding="ISO-8859-2"?>
<CNs>
<CI>
<T>
<TX></TX>
</T>
</CI>
<CI>
<T>
<TX></TX>
</T>
</CI>
<CI>
<T>
<TX></TX>
</T>
</CI>
</CNs>
应该发生什么:
$("CI:first", data);
$("T TX", node)
但是,在IE6和IE8(尚未尝试IE7)中,第二个选择似乎忽略了“节点”上下文,并搜索整个xml文档。测试在FireFox和Safari中按预期运行。这样做可以在IE $("T", node).find("TX")
中使用。有关$("T TX", node)
为什么在IE中不起作用的任何解释?
答案 0 :(得分:3)
我的猜测是JQuery代码中的一个错误:首先。我记得前一段时间看到有关让IE允许第一个孩子的CSS伪类工作的事情,你需要有一个DOCTYPE。 XML上没有doctype ......所以也许就是这样。
我只需从$(“CI:first”)切换到$(“CI”)。eq(0)。 $(“CI”)将给出所有CI元素的数组,eq(0)将为您提供第一个元素。
答案 1 :(得分:2)
这是一个错误。
根据dev.jquery.com/ticket/4748的请求,John Resig提交。