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

19.8.1.1. Простые селекторы

Простой селектор начинается (явно или неявно) с имени тега. Если, к примеруг интерес представляют только элементы

<b>&lt;р&gt;,</b>
простой селектор должен начинаться с «р». Если требуется выбрать элементы независимо от имени тега, используется шаблонный символ «*». Если селектор не начинается с имени тега или шаблонного символа, подразумевается присутствие шаблонного символа.

Имя тега или шаблонный символ определяют начальное множество элементов документа, кандидатов на выбор. Фрагмент селектора, следующий за определением имени тега, состоит из нуля или более фильтров. Фильтры применяются слева направо, в порядке их следования, и каждый из них сужает множество выбранных элементов. Фильтры, поддерживаемые библиотекой jQuery, см. в табл. 19.1.

Обратите внимание, что некоторые из фильтров, перечисленных в табл. 19.1, принимают аргументы в круглых скобках. Следующий селектор, например, выберет абзацы, которые являются первыми или каждыми третьими дочерними элементами своих родителей при условии, что они содержат слово «JavaScript» и не содержат элемент

<b>&lt;а&gt;</b>
.

<b>p:nth-child(3n+1):text(JavaScript):not(:has(a))</b>

Обычно фильтры действуют более эффективно, если им предшествует имя тега. Например, вместо использования простого фильтра «:radio» для выбора радиокнопок лучше использовать селектор «input:radio». Исключение составляют фильтры, проверяющие значение атрибута

<b>id</b>
, которые наиболее эффективно действуют, когда они употребляются автономно. Например, селектор «#address» обычно действует эффективнее, чем более явный селектор «form#address».

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

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

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

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

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

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

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

19.8.1.2. Комбинированные селекторы

Простые селекторы могут объединяться с использованием специальных операторов, или «комбинаторов», для представления отношений между элементами в дереве документа. В табл. 19.2 перечислены комбинированные селекторы, поддерживаемые библиотекой jQuery. Эти же комбинированные селекторы поддерживаются стандартом CSS3.

Ниже приводится несколько примеров комбинированных селекторов:

<b>&quot;blockquote і&quot;      // Соответствует элементу &lt;і&gt; в элементе &lt;blockquote&gt;</b>

<b>&quot;ol &gt; li&quot;           // Элемент &lt;li&gt;, прямой потомок элемента &lt;ol&gt;</b>

<b>&quot;#output + *&quot;      // Братские элементы, следующие за элементом с id=&quot;output&quot;</b>

<b>&quot;div.note &gt; hi + р&quot; // Элемент &lt;р&gt;, следующий за &lt;h1&gt; в &lt;div class=&quot;note&quot;&gt;</b>

Обратите внимание, что комбинированные селекторы не ограничены комбинациями из двух селекторов: допустимыми являются также комбинации из трех и более селекторов. Обработка комбинированных селекторов выполняется слева направо.

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

19.8.1.3. Группы селекторов

Группа селекторов, которая является разновидностью селекторов, передаваемых функции

<b>$()</b>
(или используемых в таблицах стилей), - это просто список простых или комбинированных селекторов, разделенных запятыми. Группе селекторов соответствуют все элементы, которые соответствуют любому из комбинированных селекторов в группе. С позиции нашего обсуждения даже простой селектор можно рассматривать как комбинированный. Ниже приводится несколько примеров групп селекторов:

<b>&quot;h1, h2, h3&quot;        // Соответствует элементам &lt;h1&gt;, &lt;h2&gt; и &lt;h3&gt;</b>

<b>&quot;#р1, #р2, #р3”     // Соответствует элементам с id, равным р1, р2 и р3</b>

<b>&quot;div.note, p.note&quot;  // Соответствует элементам &lt;div&gt; и &lt;р&gt; с class=&quot;note&quot;</b>

<b>&quot;body&gt;p,div.note&gt;p&quot; // &lt;p&gt;, вложенный в &lt;body&gt;, и &lt;div class=&quot;note&quot;&gt;</b>

Обратите внимание, что синтаксис селекторов CSS и jQuery позволяет использовать круглые скобки в некоторых фильтрах в простых селекторах, но не допускает более обобщенного их использования для группировки селекторов. Нельзя поместить группу селекторов или комбинированный селектор в скобки и интерпре тировать их как простой селектор, например:

<b>(hi. h2, h3)+p    // Недопустимо</b>

<b>h1+p, h2+p, h3+p  // Следует использовать этот вариант</b>

19.8.2. Методы выбора

В дополнение к грамматике селекторов, поддерживаемой функцией

<b>$()</b>
, библиотека jQuery определяет несколько методов выбора. Большинство методов из библиотеки jQuery, с которыми мы встречались в этой главе до сих пор, выполняют некоторые операции над выбранными элементами. Методы выбора отличаются от них: они изменяют множество выбранных элементов, фильтруя, расширяя или используя его в качестве отправной точки для нового выбора.

В данном разделе описываются эти методы выбора. Здесь вы увидите, что многие методы реализуют те же функциональные возможности, которые обеспечивает грамматика селекторов.

Самой простой является операция фильтрации выбора по позициям элементов в выбранном множестве. Метод

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