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>$("div").find("p") // Отыскать элементы <р> в <div>. То же, что и $("div р")</b>
Другие методы из этой категории возвращают новые объекты
<b>jQuery</b>
, представляющие дочерние, братские или родительские элементы для каждого выбранного элемента. Чаще всего им передается необязательный строковый аргумент с селектором. При вызове без селектора они возвращают, соответственно, все дочерние, братские или родительские элементы. При вызове с селектором они фильтруют список и возвращают только элементы, соответствующие селектору.
Метод
<b>children()</b>
возвращает дочерние элементы каждого выбранного элемента, фильтруя результат с применением необязательного селектора:
<b>// Отыскать все элементы <span>, которые являются дочерними для элементов </b>
<b>// с id="header" и id="footer". Тот же результат дает вызов </b>
<b>// $("«header>span,«footer>span")</b>
<b>$("#header, #footer").children("span")</b>
Метод
<b>contents()</b>
действует так же, как метод
<b>children(),</b>
но возвращает все дочерние узлы, включая текстовые, каждого выбранного элемента. Кроме того, для элементов
<b><iframe></b>
метод
<b>contents()</b>
возвращает объект
<b>Document</b>
с содержимым этого элемента. Обратите внимание, что метод
<b>contents()</b>
не принимает необязательный строковый аргумент с селектором - это обусловлено тем, что он возвращает объекты
<b>Document</b>
, не являющиеся элементами, а селекторы позволяют описывать только элементы.
Методы
<b>next()</b>
и
<b>prev()</b>
возвращают следующий и предыдущий братский элемент для каждого выбранного элемента, если они имеются. Если методу передать селектор, выбраны будут только братские узлы, соответствующие селектору:
<b>S("h1").next("р") // То же, что и $(”h1+p")</b>
<b>$("h1").prev() // Братские элементы перед элементами <h1></b>
Методы
<b>nextAll()</b>
и
<b>prevAll()</b>
возвращают все следующие и предыдущие братские элементы (если имеются) для каждого выбранного элемента. А метод
<b>siblings()</b>
возвращает все братские элементы для каждого выбранного элемента (элементы не считаются братскими по отношению к самим себе). Если любому из этих методов передать селектор, выбраны будут только братские узлы, соответствующие селектору:
<b>$( "#footer").nextAll("p'') // Все братские элементы <р>, следующие за #footer </b>
<b>$("#footer").prevAll() // Все братские элементы, предшествующие #footer</b>
В версии jQuery 1.4 и выше методы
<b>nextUntil()</b>
и
<b>prevlIntil()</b>
принимают аргумент с селектором и выбирают все братские элементы, следующие за выбранным элементом или предшествующие ему, пока не будет встречен братский элемент, соответствующий селектору. При вызове без селектора они действуют точно так же, как методы
<b>nextAll()</b>
и
<b>prevAll()</b>
при вызове их без селектора.
Метод
<b>parent()</b>
возвращает родителя для каждого выбранного элемента:
<b>$("li").parent() // Родители элементов списка, такие как <ul> и <ol></b>
Метод
<b>parents()</b>
возвращает предков (вплоть до элемента
<b><html></b>
) для каждого выбранного элемента. Оба метода,
<b>parent()</b>
и
<b>parents(),</b>
принимают необязательный строковый аргумент с селектором:
<b>S("а[href]”).parents("p") // Элементы <р>, содержащие ссылки</b>
Метод
<b>parentsUntil()</b>
выбирает предков для каждого выбранного элемента, пока не будет встречен первый предок, соответствующий указанному селектору. Метод
<b>closest()</b>
принимает обязательный строковый аргумент с селектором и возвращает ближайшего предка (если имеется) для каждого выбранного элемента, соответствующего селектору. Этот метод рассматривает элементы как предки самим себе. В версии jQuery 1.4 методу
<b>closest()</b>
можно также передать второй необязательный аргумент, чтобы не дать библиотеке jQuery подняться по дереву предков выше указанного в этом аргументе элемента: