Странность селектора jQuery - это ошибка или я делаю это неправильно? - PullRequest
6 голосов
/ 11 июня 2009

Я получаю противоречивые результаты в разных браузерах с помощью следующего теста:

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

Что должно произойти, это:

  • Загрузка xml через ajax call
  • выберите узел XML: $("CI:first", data);
  • выберите узел в этом узле: $("T TX", node)
  • второй выбор должен содержать только один тег "TX"

Однако в IE6 и IE8 (еще не пробовал IE7) второй вариант, кажется, игнорирует контекст «узла» и выполняет поиск во всем XML-документе. Тест выполняется, как и ожидалось, в FireFox и Safari. Делать это таким образом работает в IE $("T", node).find("TX"). Любые объяснения, почему $("T TX", node) не работает в IE?

Ответы [ 2 ]

3 голосов
/ 13 июня 2009

Я думаю, это ошибка в коде JQuery для: first. Я помню некоторое время назад, когда увидел, как IE заставляет работать псевдокласс CSS первого ребенка, и вам нужен DOCTYPE. В XML нет доктайпа ... так что, может быть, и все.

Я бы просто переключился с $ ("CI: first") на $ ("CI"). Eq (0). $ ("CI") даст массив всех элементов CI, а eq (0) даст вам первый элемент.

2 голосов
/ 15 июня 2009

Это ошибка.

Подано по адресу dev.jquery.com / ticket / 4748 , по запросу John Resig .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...