2009-12-17 1 views
1

Следующий кодсинтаксис селектора JQuery дает предупреждение, Firefox

stringref = "tab_2"; 
jQuery('.someclass a:not(.someclass #a_someclass_'+stringref+')').css('color', '#000'); 

дает мне это предупреждение в консоли ошибок FF 3.5.5, и я не могу понять, почему:

Warning: Missing closing ')' in negation pseudo-class '#a_someclass_tab_2'.

ли мой синтаксис терпит неудачу или у меня FF ушли в бешенство?

+3

Я не вижу проблемы с этим. И, кажется, отлично работает в FF 3.5.6: http://jsbin.com/aroli (редактируется через http://jsbin.com/aroli/edit#javascript) – brianpeiris

+0

Я не получаю никаких предупреждений о FF 3.5. 6 с вашим фрагментом кода. – RamboNo5

+0

Ничего себе, это действительно хороший ресурс! Я никогда не знал, что jsbin существует ... (и подтвердил работу в Opera, за все хорошее, что будет делать). – DMI

ответ

4

Я думаю, что ваш селектор слишком сложный - я не думаю, что пробелы допускаются в псевдослове :not(). Вы пытаетесь сопоставить a потомков .someclass, которые не имеют данного ID? Если это так, просто удалите .someclass в пределах :not().

+0

Согласен, это работает AFAIK, но это немного запутанно. Я сделал бы это так: 'jQuery ('. Someclass a'). Not ('# a_someclass_' + stringref + ')'). Css ('color,' # 000 ');' – brianpeiris

+1

цитата из документов «As jQuery 1.3: not() также поддерживает селектора, разделенные запятыми и сложными селекторами, например:: not (div a) и: not (div, a). " http://docs.jquery.com/Selectors/not – RamboNo5

+0

Цифры, как обычно, я ищу возможные проблемы в неправильном месте. Это сделал трюк, Дейв: D Большое спасибо, спасибо! –

2

I второй Дэйв в том, что это скорее всего место в вашем селекторе.

Синтаксис: not() в jQuery расширен, по сравнению со стандартом CSS, поэтому представляется, что синтаксический анализатор выдает предупреждение, поскольку он проверяет только соответствие CSS.

+0

Действительно ли это? Я не думаю, что кто-то еще видит ошибку. – brianpeiris

+0

@brianpeiris На самом деле это не ошибка, это предупреждение. Поэтому убедитесь, что это включено. На самом деле не проблема с его кодом, это ложный позитив, полученный парсером. –

+1

Ты прав. Я сделал рытье; jQuery по умолчанию для document.querySelectorAll в FF, поэтому запускаем это: 'document.querySelectorAll ('. someclass a: not (.someclass # a_someclass_tab_2)');' дает вам исключение * и * предупреждение. Затем jQuery прибегает к Sizzle для завершения выбора. – brianpeiris

1

Синтаксис выглядит хорошо и не дал мне никаких ошибок. Но я бы немного упростил это, что должно помочь вам избежать ошибочных предупреждений.

var stringref = "tab_2"; 
jQuery('a.someclass:not(#a_someclass_'+stringref+')').css('color', '#000'); 
3

Firefox (3.5.6) действительно делает бросить предупреждение (, если вы не видите его в Firebug, это потому, что вы не позволили «Показывать CSS ошибки» - см Firebug консоли вкладка) ,

Firefox в ложном позитивном ключе синтаксический разбор синтаксиса jQuery как несоответствующий CSS. Безопасно игнорировать это предупреждение FF (это не ошибка).