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

时间:2009-06-11 13:03:19

标签: 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>

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

应该发生什么:

  • 通过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中不起作用的任何解释?

2 个答案:

答案 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提交。