JavaScript. Подробное руководство, 6-е издание, стр. 327

19.8.2.1. Использование результатов выбора в качестве контекста

Методы

<b>filter(), add()</b>
и
<b>not(),</b>
описанные выше, возвращают пересечение, объединение и разность независимых множеств выбранных элементов. Библиотека jQuery определяет также несколько других методов выбора, которые используют текущее множество выбранных элементов в качестве контекста. Для каждого выбранного элемента эти методы создают новое множество, используя выбранный элемент в качестве контекста, или отправной точки, и возвращают новый объект
<b>jQuery</b>
, содержащий объединение этих множеств. Как и метод
<b>add(),</b>
эти методы удаляют повторные вхождения одних и тех же элементов и сортируют их в порядке следования в документе.

Наиболее универсальным в этой категории методов выбора является метод

<b>find()</b>
. Он выполняет поиск потомков в каждом выбранном элементе, соответствующих указанной строке селектора, и возвращает новый объект
<b>jQuery</b>
, представляющий новое множество соответствующих потомков. Обратите внимание, что вновь выбранные элементы не объединяются с существующим множеством - они возвращаются в виде нового множества элементов. Отметьте также, что метод
<b>find()</b>
отличается от метода
<b>filter(),</b>
который просто сужает текущее множество выбранных элементов, не добавляя новых:

<b>$(&quot;div&quot;).find(&quot;p&quot;) // Отыскать элементы &lt;р&gt; в &lt;div&gt;. То же, что и $(&quot;div р&quot;)</b>

Другие методы из этой категории возвращают новые объекты

<b>jQuery</b>
, представляющие дочерние, братские или родительские элементы для каждого выбранного элемента. Чаще всего им передается необязательный строковый аргумент с селектором. При вызове без селектора они возвращают, соответственно, все дочерние, братские или родительские элементы. При вызове с селектором они фильтруют список и возвращают только элементы, соответствующие селектору.

Метод

<b>children()</b>
возвращает дочерние элементы каждого выбранного элемента, фильтруя результат с применением необязательного селектора:

<b>// Отыскать все элементы &lt;span&gt;, которые являются дочерними для элементов </b>

<b>// с id=&quot;header&quot; и id=&quot;footer&quot;. Тот же результат дает вызов </b>

<b>// $(&quot;«header&gt;span,«footer&gt;span&quot;)</b>

<b>$(&quot;#header, #footer&quot;).children(&quot;span&quot;)</b>

Метод

<b>contents()</b>
действует так же, как метод
<b>children(),</b>
но возвращает все дочерние узлы, включая текстовые, каждого выбранного элемента. Кроме того, для элементов
<b>&lt;iframe&gt;</b>
метод
<b>contents()</b>
возвращает объект
<b>Document</b>
с содержимым этого элемента. Обратите внимание, что метод
<b>contents()</b>
не принимает необязательный строковый аргумент с селектором - это обусловлено тем, что он возвращает объекты
<b>Document</b>
, не являющиеся элементами, а селекторы позволяют описывать только элементы.

Методы

<b>next()</b>
и
<b>prev()</b>
возвращают следующий и предыдущий братский элемент для каждого выбранного элемента, если они имеются. Если методу передать селектор, выбраны будут только братские узлы, соответствующие селектору:

<b>S(&quot;h1&quot;).next(&quot;р&quot;) // То же, что и $(”h1+p&quot;)</b>

<b>$(&quot;h1&quot;).prev()    // Братские элементы перед элементами &lt;h1&gt;</b>

Методы

<b>nextAll()</b>
и
<b>prevAll()</b>
возвращают все следующие и предыдущие братские элементы (если имеются) для каждого выбранного элемента. А метод
<b>siblings()</b>
возвращает все братские элементы для каждого выбранного элемента (элементы не считаются братскими по отношению к самим себе). Если любому из этих методов передать селектор, выбраны будут только братские узлы, соответствующие селектору:

<b>$( &quot;#footer&quot;).nextAll(&quot;p'') // Все братские элементы &lt;р&gt;, следующие за #footer </b>

<b>$(&quot;#footer&quot;).prevAll()     // Все братские элементы, предшествующие #footer</b>

В версии jQuery 1.4 и выше методы

<b>nextUntil()</b>
и
<b>prevlIntil()</b>
принимают аргумент с селектором и выбирают все братские элементы, следующие за выбранным элементом или предшествующие ему, пока не будет встречен братский элемент, соответствующий селектору. При вызове без селектора они действуют точно так же, как методы
<b>nextAll()</b>
и
<b>prevAll()</b>
при вызове их без селектора.

Метод

<b>parent()</b>
возвращает родителя для каждого выбранного элемента:

<b>$(&quot;li&quot;).parent() // Родители элементов списка, такие как &lt;ul&gt; и &lt;ol&gt;</b>

Метод

<b>parents()</b>
возвращает предков (вплоть до элемента
<b>&lt;html&gt;</b>
) для каждого выбранного элемента. Оба метода,
<b>parent()</b>
и
<b>parents(),</b>
принимают необязательный строковый аргумент с селектором:

<b>S(&quot;а[href]”).parents(&quot;p&quot;) // Элементы &lt;р&gt;, содержащие ссылки</b>

Метод

<b>parentsUntil()</b>
выбирает предков для каждого выбранного элемента, пока не будет встречен первый предок, соответствующий указанному селектору. Метод
<b>closest()</b>
принимает обязательный строковый аргумент с селектором и возвращает ближайшего предка (если имеется) для каждого выбранного элемента, соответствующего селектору. Этот метод рассматривает элементы как предки самим себе. В версии jQuery 1.4 методу
<b>closest()</b>
можно также передать второй необязательный аргумент, чтобы не дать библиотеке jQuery подняться по дереву предков выше указанного в этом аргументе элемента: