Неполадки при выборе метода jquery index () по значению атрибута - PullRequest
4 голосов
/ 12 августа 2011

Может ли кто-нибудь взглянуть на этот ?

Вы увидите первые оповещения -1, тогда как я ожидал 1. Кто-нибудь знает почему?

Базовый код со скрипки:

<input type="checkbox" value="0" />0
<input type="checkbox" value="1" />1
<input type="checkbox" value="2" />2
<input type="checkbox" value="3" />3
alert($(':checkbox').index("input[value='1']"));
alert($(':checkbox').index("input[value='0']"));

Ответы [ 4 ]

4 голосов
/ 12 августа 2011

Селекторы поменялись местами:

Пример: http://jsfiddle.net/RaV35/

 // element---v    collection----------v
alert($("input[value='0']").index(":checkbox"));
alert($("input[value='1']").index(":checkbox"));

При прохождении index()[документы] метод селектор, отдельный элемент, для которого вы хотите индекс, является элементом, для которого вызывается .index().

Селектор, который вы передаете .index(), представляет коллекцию, с которой проверяется элемент в исходном объекте jQuery.

Когда исходный объект jQuery (слева) также содержит коллекциютолько первый тестируется на предмет индекса против селектора справа.Вот почему тот с value="0" работал.

 //   v--- only the first is tested (and it has value="0")...
$(':checkbox').index("input[value='0']")
 //   ----------------------^ ...and it is at index 0 of this "collection"
0 голосов
/ 12 августа 2011

Я не уверен, что понимаю, почему вы вообще должны использовать index(). Почему бы просто не поместить все это в селектор:

$('input:checkbox[value="2"]');

Вы можете видеть, как это работает в этой скрипке: http://jsfiddle.net/jfriend00/Xa6hA/

Если вы хотите сделать это в несколько этапов, для меня было бы более логично сделать это так:

$('input:checkbox').filter('[value="3"]');

При этом получаются все флажки, а затем отфильтровываются эти списки до тех, которые с value="3" кажутся намного более интуитивными, чем способ, которым index() работает.

0 голосов
/ 12 августа 2011

Вам нужно передать ему объект jQuery: http://jsfiddle.net/ybKzJ/1/

alert($(':checkbox').index($("input[value='1']")));
alert($(':checkbox').index("input[value='0']"));

Редактировать:

Нет, это не кажется правильным, так как второй работает просто отлично.

... любопытно ...

0 голосов
/ 12 августа 2011
alert($(':checkbox[value='1']').index());
alert($(':checkbox[value='0']').index());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...