Проблема с селектором jQuery - PullRequest
0 голосов
/ 28 января 2011
<input type="radio" id="rad1" name="group" value="one">First Option</input><br>
<input type="radio" id="rad2" name="group" value="two">Second Option</input><br>
<input type="radio" id="rad3" name="group" value="three">Third Option</input><br>

<br>

<input type="radio" id="rad7" name="group2" value="one">First Option</input><br>
<input type="radio" id="rad8" name="group2" value="two">Second Option</input><br>
<input type="radio" id="rad9" name="group2" value="three">Third Option</input><br>

Следующие утверждения: true

$('[value="one"]').length == 2

$('[name="group2"]').length == 3

Так как же получается ...

$('[value="one"]',$('[name="group2"]')).length == 0

?

Я бы подумал, что это должноэффективно искать во всех элементах с name==group2 элементы с value=="one" т.е. 1.Почему это не так?

Ответы [ 5 ]

4 голосов
/ 28 января 2011

Этот селектор, использующий второй аргумент для контекста / контекста:

$('[value="one"]', $('[name="group2"]'))

Пытается найти элементы с [value="one"], которые происходят от элементов с [name="group2"]. Это означает, что вы в конечном итоге смотрите как минимум на два уровня различных элементов в DOM.

В вашем случае ваши радиокнопки имеют оба атрибута, поэтому вы хотите вместо этого присоединить оба селектора атрибутов (я добавляю input, чтобы просто сохранить jQuery):

$('input[name="group2"][value="one"]')
2 голосов
/ 28 января 2011

Я думаю, что вы хотите:

$('[name="group2"][value="one"]')

Это выбирает элементы, которые имеют атрибут name со значением group2 и value атрибут со значением one.

$(selector, element) - это что-то другое.Он найдет всех потомков element, которые соответствуют selector.См. документацию .

1 голос
/ 28 января 2011

Вместо этого вы хотите найти значение one из group2:

$('input[name="group2"][value="one"]').length

Это называется multiple-attribute-selector (документы) .

Обратите внимание, что я также добавил селектор тегов input.Так что каждый элемент на странице не нуждается в анализе.

1 голос
/ 28 января 2011
$('input:[value="one"], input:[name="group2"]').length === 5

Вы должны использовать одну строку, разделенную запятой. Кстати, это плохая практика - писать селектор типа [anything=foobar]. Это неявное использование универсального селектора (*) , который будет запрашивать все элементы в вашей разметке.

Это запросит оба селектора и добавит результаты в упакованный набор. Если вы хотите запросить узлы, которые владеют обоими атрибутами, подключите вещи как:

$('input:[value="one"][name="group2"]').length === 1
0 голосов
/ 28 января 2011

попробуйте длину $ ('[value = "one"], [name = "group2"]')

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