jquery选择器奇怪 - 这是一个错误还是我做错了?

mor*_*des 6 jquery

通过以下测试,我在浏览器中获得了不一致的结果:

============ 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)

应该发生的是:

  • 通过ajax调用加载xml
  • 选择一个xml节点: $("CI:first", data);
  • 选择该节点中的节点: $("T TX", node)
  • 第二个选择应该只有一个"TX"标签

但是,在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) 将给出第一个元素。