2009-11-23 1 views
3

Хорошо, я не могу понять, что я делаю неправильно здесь ...JQuery селектор не работает правильно

Возьмем следующий селектор JQuery ...

$('tr[batchid]:has(span.chkselb input:checked) span[id=assetcount]') 

Это возвращает 2 элемента. Но если я сделаю следующий селектор:

$('tr[batchid]:has(span.chkselb input:checked) span#assetcount') 

Это возвращает 0 элементов. Разве эти два селектора для всех целей и целей не идентичны?
Или есть странное взаимодействие с оператором «: has» или что-то в этом роде? Я получил его работу с первым заявлением, но мне действительно интересно, почему второй (мой оригинальный селектор) не работает. Какие-нибудь идеи?

ответ

6

$('tr[batchid]:has(span.chkselb input:checked) span[id=assetcount]') не должен возвращать два элемента, так как идентификаторы должны быть уникальными.

Это говорит о том, что вы повторно используете идентификаторы, и я предполагаю, что первый из них не соответствует tr[batchid]:has(span.chkselb input:checked), поэтому второй селектор не возвращает никаких строк.

Вы должны сделать идентификаторы уникальными.

+0

Хороший звонок ...... – bdukes

+0

Итак, я думаю, что это должно быть что-то в том, как jQuery проверяет селектор id (#) против способа проверки атрибута ([]) селектора, да? Я использовал атрибут id для определения диапазона в строках в элементе управления DataGrid (связанный программно). Вместо этого я изменил его на «fieldid =» и соответствующим образом скорректировал свой селектор. Спасибо за объяснение! – eidylon