Почему один из этих селекторов jQuery работает, а другой нет? - PullRequest
3 голосов
/ 06 октября 2009
$.prev("div.a").find('.b').

$.prev("div.a .b").

Один работает, а другой нет. Какая разница?

Ответы [ 2 ]

5 голосов
/ 06 октября 2009

Ну, селектор работает, он просто не дает того, что вы хотите:

Согласно JQuery Docs .prev([expr]):

Получить набор элементов, содержащих уникальные предыдущие братья и сестры каждого из согласованный набор элементов. Используйте необязательное выражение для фильтрации согласованный набор. Только тот сразу предыдущий брат возвращается, не все предыдущие братья и сестры.

Это означает, что $(elem).prev("div.a").find('.b') ищет любого предшествующего брата в DOM-дереве, которое является div.a, и возвращает первое - затем ищите внутри этого элемента, используя .find() для .b

Принимая во внимание: $(elem).prev("div.a .b") ищет любого предыдущего родного брата, который является div.a .b, и возвращает первого.

Они не эквивалентны и поэтому дают разные результаты.

0 голосов
/ 06 октября 2009

find () не ищет выбранные элементы, только их потомков ... поэтому, если класс .b находится в элементе div.a, вы его не найдете.

Найти найдешь:

<div class="a">
  <div class="b">

Но не:

<div class="a b">

Для более: http://docs.jquery.com/Traversing/find

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