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

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

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

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

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

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

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

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

// Отыскать все элементы <span>, которые являются дочерними для элементов
// с и. Тот же результат дает вызов
// $("«header>span,«footer>span")
$("#header, #footer").children("span")

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

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

S("h1").next("р") // То же, что и $(”h1+p")
$("h1").prev()    // Братские элементы перед элементами <h1>

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

$( "#footer").nextAll("p'') // Все братские элементы <р>, следующие за #footer
$("#footer").prevAll()     // Все братские элементы, предшествующие #footer

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

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

$("li").parent() // Родители элементов списка, такие как <ul> и <ol>

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

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

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

$("a[href]").closest("div") // Самые внутренние элементы <div>, содержащие ссылки
$("а[href]").parentsUntil():not(div)") // Все элементы <div>, непосредственно
                                       // обертывающие элементы <а>

Оглавление книги


Генерация: 2.178. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз