"h1, h2, h3" // Соответствует элементам <h1>, <h2> и <h3>
"#р1, #р2, #р3” // Соответствует элементам с id, равным р1, р2 и р3
"div.note, p.note" // Соответствует элементам <div> и <р> с class="note"
"body>p,div.note>p" // , вложенный в <body>, и <div class="note">
Обратите внимание, что синтаксис селекторов CSS и jQuery позволяет использовать круглые скобки в некоторых фильтрах в простых селекторах, но не допускает более обобщенного их использования для группировки селекторов. Нельзя поместить группу селекторов или комбинированный селектор в
скобки и интерпре тировать их как простой селектор, например:
(hi. h2, h3)+p // Недопустимо
h1+p, h2+p, h3+p // Следует использовать этот вариант
19.8.2. Методы выбора
В дополнение к грамматике селекторов, поддерживаемой функцией
$
, библиотека jQuery определяет несколько методов выбора. Большинство методов из библиотеки jQuery, с которыми мы встречались в этой главе до сих пор, выполняют некоторые операции над выбранными элементами. Методы выбора отличаются от них: они изменяют множество выбранных элементов, фильтруя, расширяя или используя его в качестве отправной точки для нового выбора.
В данном разделе описываются эти методы выбора. Здесь вы увидите, что многие методы реализуют те же функциональные возможности, которые обеспечивает грамматика селекторов.
Самой простой является операция фильтрации выбора по позициям элементов в выбранном множестве. Метод
first
возвращает объект
jQuery
, содержащий только первый выбранный элемент, а метод
last
возвращает объект
jQuery
, содержащий только последний выбранный элемент. Более обобщенный метод
eq
возвращает объект
jQuery
, содержащий единственный выбранный элемент с указанным индексом. (В версии jQuery 1.4 допускается использовать отрицательные индексы, в этом случае отсчет начинается с конца выбранного множества.) Обратите внимание, что эти методы возвращают объект
jQuery
с единственным элементом, что отличает их от обычной операции индексирования массива, которая возвращает единственный элемент без объекта
jQuery
, обертывающего его:
var paras = $("р");
paras.fіrst // Выберет только первый элемент <р>
paras.last // Выберет только последний элемент <р>
paras.eq(1) // Выберет второй элемент <р>
paras.eq(-2) // Выберет второй с конца элемент <р>
paras[1] // Сам второй элемент <р>
Универсальным методом фильтрации выбора по позиции является метод
slice.
Этот метод действует подобно методу
Array.slice
: он принимает начальный и конечный индексы (отрицательные индексы откладываются от конца массива) и возвращает объект
jQuery
, содержащий элементы с индексами от начального до конечного, не включая его. Если конечный индекс не указан, возвращаемый объект будет содержать все элементы от начального индекса и до конца:
$("p").slice(2,5) // Выберет 3-й, 4-й и 5-й элементы <р>
$("div").slice(-3) // Последние три элемента <div>
Метод
filter
является универсальным методом фильтрации и может использоваться тремя разными способами:
• Если передать методу
filter
строку с селектором, он вернет объект
jQuery
, содержащий только те из выбранных элементов, которые соответствуют этому селектору.
• Если передать методу
filter
другой
объект
jQuery
, он вернет новый объект
jQuery
, содержащий пересечение множеств элементов в двух исходных объектах
jQuery
. Методу можно также передать массив элементов и даже единственный элемент документа.
• Если передать методу
filter
функцию-предикат, эта функция будет вызвана для каждого выбранного элемента и метод
filter
вернет объект
jQuery
, содержащий только те элементы, для которых функция-предикат вернет true (или любое другое истинное значение). Элемент будет передан функции в виде значения ссылки
this
, а индекс элемента - в виде аргумента. (Смотрите также описание метода
не фильтрует и не сужает выбор, а расширяет его. Метод
add
можно вызывать с любыми аргументами (кроме функций), которые можно передавать функции
$
. Он возвращает первоначальное множество выбранных элементов, плюс элементы, которые были бы выбраны (или созданы) при передаче этих же аргументов функции
$
. Метод
add
удаляет повторные вхождения элементов и сортирует элементы в порядке их следования в документе:
// Эквивалентные способы выбора всех элементов <div> и <р>
$("div, р") // Используется группа селекторов
$("div").add("p") // Передать методу add селектор
$("div").add($("p")) // Передать методу add объект jQuery
var paras = document.getElementsByTagName("p"); // Объект, подобный массиву