2008-10-09 4 views
2

следующие работы в Firefox, но перерывы в IE7 & 8:JQuery CSS селекторы в IE

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

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

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

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

EDIT: хорошо, мой фактический код реальной жизни это:

$("#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 
+0

это работает для меня, как для IE7, так и для Firefox – Nico 2008-10-09 12:08:37

ответ

2

Место указывается состояния:

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> 
+0

Спасибо за этот Пакс. Ваш пример отлично работает. Я сделаю некоторую отладку и дам вам знать, в чем моя проблема. По крайней мере, теперь я знаю свою ошибку;) Большое спасибо! – 2008-10-09 13:33:05

1

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

+0

ОК, мой реальный код в реальной жизни: $ ("# charges-gsm, # charges-gsm-faq, # charges-gsm-prices"). HTML (HTML); и моя ошибка это (IE8): сообщение: 'NODENAME' равно нулю или не является объектом Line: 19 Char: 150 Код: 0 URI : http://ajax.googleapis.com/ajax /libs/jquery/1.2.6/jquery.min.js – 2008-10-09 12:15:44

0

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

0

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

т.е.

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

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

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

В этом secenario является:

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

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

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

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

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