通过以下测试,我在浏览器中获得了不一致的结果:
============ 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>
Run Code Online (Sandbox Code Playgroud)
============ 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>
Run Code Online (Sandbox Code Playgroud)
应该发生的是:
$("CI:first", data);$("T TX", node)但是,在IE6和IE8(尚未尝试IE7)中,第二个选择似乎忽略了"节点"上下文,并搜索整个xml文档.测试在FireFox和Safari中按预期运行.这样做可以在IE中使用$("T", node).find("TX").任何解释为什么$("T TX", node)在IE中不起作用?
小智 3
我的猜测是 :first 的 JQuery 代码中存在错误。我记得不久前看到一个关于让 IE 允许第一个子 CSS 伪类工作的事情,你需要有一个 DOCTYPE。XML 上没有文档类型...所以也许就是这样。
我只是从 $("CI:first") 切换到 $("CI").eq(0)。$("CI") 将给出所有 CI 元素的数组,eq(0) 将给出第一个元素。
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |