Селекторы jQuery CSS в IE - PullRequest
       15

Селекторы jQuery CSS в IE

2 голосов
/ 09 октября 2008

Следующее работает в Firefox, но ломается в IE7 & 8:

$("#my-first-div, #my-second-div").hide();

так что я должен сделать это:

$("#my-first-div").hide();
$("#my-second-div").hide();

Это нормально?

РЕДАКТИРОВАТЬ: хорошо, мой реальный код реальной жизни это:

$("#charges-gsm,#charges-gsm-faq,#charges-gsm-prices").html(html);

и моя ошибка в этом

( IE8): Message: 'nodeName' is null or not an object
  Line: 19 Char: 150 Code: 0
  URI: http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js 

Ответы [ 5 ]

2 голосов
/ 09 октября 2008

В указанном вами месте указано:

Message: 'nodeName' is null or not an object
    Line: 19 Char: 150 Code: 0
    URI: http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js

Этот конкретный кусок jquery:

nodeName:function(elem,name){
    return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();
}

, который сам по себе является замыканием, созданным для вызова jQuery.extend(). Поэтому я хотел бы спросить, если вы делаете «View source» или его эквивалент в IE, есть ли другие вхождения строки «nodeName», которые могут мешать jQuery.

Можете ли вы также проверить следующее, создав файл xx.html и открыв его в IE7 / 8? Он отлично работает под Firefox 3 в Ubuntu, с пробелами после запятых в селекторе или без них.

<html>
  <head>
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
  <script type="text/javascript">
    $(document).ready(function(){
      $("a").click(function(event){
        $("#charges-gsm,#charges-gsm-faq,#charges-gsm-prices").html("xx")
        event.preventDefault();
      });
    });
  </script>
  </head>
  <body>
    <a href="http://jquery.com/">jQuery</a>
    <hr>
    <div id="charges-gsm">CHARGES-GSM</div>
    <div id="charges-gsm-faq">CHARGES-GSM-FAQ</div>
    <div id="charges-gsm-prices">CHARGES-GSM-PRICES</div>
  </body>
</html>
1 голос
/ 09 октября 2008

Хм, я не могу продублировать проблему в IE7 (у меня обе формы работают нормально). Как это ломается? Не скрывает ли он или только первый?

0 голосов
/ 25 ноября 2008

Случайно, один из ваших элементов вложен в другой?

то есть:

<div id="foo">
  <div id="bar"> 
    <div id="baz">
  </div>
</div>

Если это так, вы можете столкнуться с проблемой указателя, когда IE, возможно, освободил панель до того, как вы попытаетесь определить, что это div. Поведение

$("#foo,#bar,#baz").html("xx"); 

В этом сценарии:

  1. Заменить #foo на xx
  2. Заменить #bar на xx
  3. Заменить #baz на xx

Однако, если на этапах 2 и 3, #bar и #baz больше не существует, вам будет немного весело. (Неважно, если xx содержит копию #bar и #baz, они, вероятно, будут разными объектами, а заменяемые вами исходные объекты уже захвачены, просто их больше нет в DOM /)

Возможно, вы можете подавить (да, ужасно, ужасная идея) эту ошибку, инкапсулировав процедуру в try / catch

try { 
  $("#foo,#bar,#baz").html("xx"); 
}
catch( e ) 
{
   /* DO NOTHING D: */ 
}

Но это ваше последнее средство, сразу после получения какого-либо JS-отладчика, связывающего IE и отслеживающего ошибку до его ядра.

0 голосов
/ 09 октября 2008

Должно работать, согласно документации . Есть вероятность, что вам нужно удалить символ пробела после запятой.

0 голосов
/ 09 октября 2008

Пробовали ли вы без пробела после запятой? Примеры, приведенные в спецификации, не имеют пробела.

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