jQuery – Как использовать селекторы для выделения элементов страницы
Обычно селекторы jQuery используются для выбора элементов на странице, чтобы затем вызвать методы jQuery для манипулирования ими.
Селекторы jQuery основаны на селекторах CSS, и если вы знаете CSS, то уже имеет базовое представление об идее выбора элементов на странице.
В данном уроке мы рассмотрим селекторы, которые поддерживаются jQuery. Многие из них такие же как и селекторы CSS, но есть и специфические для jQuery. Для каждого селектора приведен пример использования для выбора элемента страницы.
В урок включены следующие разделы:
- Основные селекторы
- Выбор элементов по атрибуту
- Выбор элементов по содержанию
- Выбор элементов по иерархии
- Выбор полей формы
- Выбор элементов по их положению
- Другие полезные селекторы
Здесь приводится полный список всех селекторов, которые поддерживаются в jQuery.
jQuery поддерживает только те селекторы CSS, которые выбирают элементы DOM. Например, :visited
, :hover
и :first-line
не поддерживаются.
Основные селекторы
Основные селекторы вам знакомы, если вы когда-нибудь создавали хотя бы один шаблон CSS. скорее всего, вы будете использовать данные селекторы на протяжении 90% всего времени работы с jQuery:
Селектор | Описание | Пример |
---|---|---|
Все | Выбирает все элементы на странице, включая head , body и так далее. |
$("*") |
Элемент | Выбирает все элементы с заданным тегом. | $("p") $("div") |
Класс | Выбирает все элементы с заданным именем класса. | $(".myClass") $("p.myClass") |
ID | Выбирает один элемент с заданным атрибутом id . |
$("#myID") $("p.#myID") |
Вы также можете комбинировать несколько селекторов в один с помощью запятой. jQuery выберет все элементы, которые соответствуют любому из селекторов. Например:
// Выбирает все div с классом .myClass, а также все параграфы var selectedElements = $("div.myClass, p");
Выбор элементов по атрибуту
Основные селекторы отлично подходят в случаях, если нужно выбрать все параграфы на странице или элемент, который нужно выбрать имеет класс CSS или ID.
Однако, иногда нужно выбрать определенный элемент, у которого нет класса или ID, и нет возможности просто добавить класс или ID к данному элементу в разметке. Такая ситуация может сложиться при использовании CMS с фиксированным шаблоном HTML или при работе с контентом, созданным пользователем.
В данной ситуации возможно сузить область выбора с помощью атрибута HTML элемента, который надо выбрать. Например, можно выбрать:
- Изображение по атрибуту
src
- Ссылку по атрибуту
href
- Все поля
input
формы, которые имеют атрибутtype="checkbox"
…и так далее.
jQuery имеет много селекторов, которые можно использовать для выбора элементов по атрибуту:
Селектор | Описание | Пример |
---|---|---|
Атрибут | Выбирает элемент(ы), которые содержат определенный атрибут вне зависимости от значения атрибута. | $("div[attributeName]") |
Атрибут равен | Выбирает элемент(ы), которые содержат заданный атрибут с заданным значением. | $("div[attributeName='value']") |
Атрибут не равен | Выбирает элемент(ы), которые не содержат заданного атрибута или сожержат заданный атрибут, но его значение не соответствует заданному. | $("div[attributeName!='value']") |
Атрибут начинается с | Выбирает элемент(ы), которые содержат заданный атрибут, у которого значение начинается с заданной строки. | $("div[attributeName^='value']") |
Атрибут заканчивается | Выбирает элемент(ы), которые содержат атрибут, у которого значение заканчивается заданной строкой. | $("div[attributeName$='value']") |
Атрибут содержит | Выбирает элемент(ы), который содержит атрибут, у которого значение содержит заданную строку. | $("div[attributeName*='value']") |
Атрибут содержит слово | Выбирает элемент(ы), который содержит атрибут, у которого значение содержит заданное слово. “Слово” – это последовательность символов без пробелов. | $("div[attributeName~='value']") |
Атрибут содержит префикс | Выбирает элемент(ы), который содержит атрибут, у которого значение либо равно заданной строке, либо начинается с заданной строки с последующим дефисом. | $("div[attributeName|='value']") |
Вы можете комбинировать селекторы атрибутов для сужения области выбора. Например:
// Выбираем только те изображения, которые имеют ширину 300 px и высоту 200 px var selectedImages = $("img[width=300][height=200]");
Селектор “Атрибут содержит префикс” выглядит неэффективно, но он сделан для обработки атрибутов языка, таких как lang="en"
и lang="en-US"
.
Выбор элементов по содержанию
Если нет возможности сузить область выбора по основным селекторам и по атрибутам, то можно “покопаться” в содержании элемента для определения, подходит он для выбора или нет. jQuery имеет 4 селектора для данного назначения:
Селектор | Описание | Пример |
---|---|---|
:contains() |
Выбирает элемент(ы), которые содержат заданный текст. Текст может быть в самом элементе, так и в любом элементе внутри в выбранного элемента. Примечание: :contains() чувствительно к регистру – "Hello" не соответствует "hello" . |
// Выбираем все div, которые содержат "myText": |
:has() |
Выбирает элемент(ы), которые содержат 1 или более элементов, соответствующих заданной строке. Селектор просматривает на соответствие все элементы внутри заданного элемента. | // Выбираем все div, которые содержат параграфы: |
:parent |
Выбирает элемент(ы), которые содержат другие элементы или текстовые узлы. | // Выбираем все div, которые содержат что-нибудь: |
:empty |
Выбирает элемент(ы), которые не содержат других элементов или текстовых узлов. | // Выбираем все div, которые не содержат ничего: |
Следующий пример показывает, как использовать :contains()
, наряду с селектором класса для выбора параграфов, которые имеют определенный класс, дополнительным условием служит условие содержания определенной строки (или строк):
// Выбираем все параграфы,которые имеют класс "intro" // и также содержат текст "MegaWidget" var selectedElements = $("p.intro:contains('MegaWidget')"); // Выбираем все параграфы, которые имеют класс "intro" // и содержат и "MegaWidget" и "WonderWidget" var selectedElements = $("p.intro:contains('MegaWidget'):contains('WonderWidget')");
Выбор элементов по иерархии
Другой способ выбрать элементы в jQuery – это рассмотреть, как они соотносятся друг к другу на странице. Вероятно, вы знаете много таких селекторов по работе с CSS:
Селектор | Описание | Пример |
---|---|---|
Ребенок | Выбирает элемент(ы), которые являются ребенком (прямым потомком) заданного предка(ов). | // Выбираем все элементы списка с классом "highlight", которые являются ребёнком для списка с ID "nav": |
Потомок | Выбирает элемент(ы), которые являются потомками (детьми, внуками и так далее) заданного предка(ов). Это более общая форма селектора Ребенок. | // Выбираем все ссылки внутри списка с ID "nav": |
Следующий соседний элемент | Выбирает элемент(ы), который следует непосредственно за заданным элементом, где оба элемента имеют одного и того же родителя. | // Выбираем все параграфы, которые следуют непосредственно за заголовком H1: |
Следующий сестринский элемент | Выбирает элемент(ы), который следует за другим элементом, где оба элемента являются потомками одного родителя. Это более обобщенная версия селектора следующий соседний элемент. | // Выбираем все ячейки таблицы после ячейки, которая содержит слово "Hello": |
Первый ребенок | Выбирает элемент(ы), который является первым ребенком его родителя. | // Выбираем первые пункты во всех списках на странице: |
Последний ребенок | Выбирает элемент(ы), который является последним ребенком его родителя. | // Выбираем последние пункты во всех списках на странице: |
N-й ребенок | Выбирает элемент(ы), который является n-м ребенком его родителя (смотри примечание ниже). | // Выбираем третьи пункты во всех списках на странице: |
Только ребенок | Выбирает элемент(ы), которые являются ребенком родителей, у которых есть только дети. | // Выбираем только элементы в списках с одним пунктом: |
Кроме задания определенного номера ребенка с помощью :nth-child()
, можно указывать even
(для выбора всех детей с четными номерами), odd
(для выбора всех детей с нечетными номерами), или выражение (например, "li:nth-child(3n+2)"
выбирает каждый третий элемент в списке, а отсчет начинается со второго элемента).
В следующем примере выбирается первая ячейка всех нечетных строк в таблице, которая имеет id
"myTable"
:
var selectedElements = $("table#myTable tr:nth-child(odd) > td:first-child");
Выбор полей формы
Элементы формы имеют некоторые специфические свойства, которые вынуждают использовать некоторые трюки для их выбора. Например, чекбоксы, наряду со многими другими типами полей, являются элементами input
. Таким образом,, чтобы выбрать чекбоксы в форме нужно использовать $("input[type='checkbox']")
.
Аналогично, идентификация выбранных элементов в списке select
или отмеченных чекбоксов в форме может быть утомительным занятием./
К счастью, jQuery обеспечивает несколько специфических для форм селекторов, которые облегчают жизнь:
Селектор | Описание | Пример |
---|---|---|
:button |
Выбирает все кнопки формы. | $("input:button") |
:checkbox |
Выбирает все чекбоксы. | $("input:checkbox") |
:file |
Выбирает все поля загрузки фала. | $("input:file") |
:image |
Выбирает все поля ввода изображения. | $("input:image") |
:password |
Выбирает все поля пароля. | $("input:password") |
:radio |
Выбирает все радио кнопки. | $("input:radio") |
:reset |
Выбирает все кнопки перезагрузки формы. | $("input:reset") |
:submit |
Выбирает все кнопки отправки формы. | $("input:submit") |
:text |
Выбирает все поля ввода текста. | $("input:text") |
:input |
Выбирает все поля формы, включая элементы input , textarea , и select . |
$(":input") |
:checked |
Выбирает все отмеченные чекбоксы радио кнопки. | $("input:checked") |
:selected |
Выбирает все элементы option . |
$("option:selected") |
:disabled |
Выбирает все недоступные поля формы. | $("input:disabled") |
:enabled |
Выбирает все Доступные поля формы. | $("input:enabled") |
Кроме того, что написано, можно использовать, например, $("input:checkbox")
для выбора всех чекбоксов на странице. Однако, $("input:checkbox")
действует быстрее, так как jQuery может использовать функцию JavaScript getElementsByTagName()
для быстрого ограничения объемов поиска только элементами input
. Это действительно для jQuery вообще – для ускорения кода всегда ограничивайте объем для работы селекторов там, где возможно. Например, $("*")
действует очень медленно, так как jQuery должен найти каждый отдельный элемент на странице.
Следующий пример ищет форму, которая имеет атрибут action
со значением "mailform.php"
, затем выбирает все отмеченные радио кнопки в форме:
var selectedElements = $("form[action='mailform.php'] input:radio:checked");
Выбор элементов по их положению
Иногда нужно выбрать элемент, про который известно, что он расположен в наборе ранее выбранных элементов. Например, нужно выделить первый параграф, который имеет класс "myClass"
. Для усложнения примера допустим, что нужно выбрать все пункты в списке, который имеет класс "myClass"
, а затем выбрать 5-й пункт из получившегося набора.
jQuery имеет семь селекторов, которые можно использовать для ограничения области поиска на основе позиции элемента:
Селектор | Описание | Примеры |
---|---|---|
:first |
Выбирает первый элемент в наборе отобранных элементов. | // Выбираем первый параграф, который имеет класс "myClass": |
:last |
Выбирает последний элемент в наборе отобранных элементов. | // Выбираем последний параграф, который имеет класс "myClass": |
:eq() |
Выбирает единственный элемент в наборе отобранных элементов. Выбор элемента осуществляется по последовательному номеру индекса (0 = первый элемент, 1 = второй и так далее). |
// Выбираем з-й параграф, который имеет класс "myClass": |
:lt() |
Выбирает элементы в наборе отобранных элементов, которые расположены перед элементом с заданным индексом. Например, если задан индекс 2 (то есть 3-й элемент), то будут выбраны первые 2 элемента (с индексами 0 и 1). |
// /Выбираем первые 2 параграфа, которые имеют класс "myClass": |
:gt() |
Выбираем элементы в наборе отобранных элементов, которые расположены после элемента с заданным индексом. Например, если задан индекс 2 (то есть 3-й элемент), то будут выбраны все элементы после третьего. | // Выбираем все параграфы, которые имеют класс "myClass", за исключением первых трех: |
:even |
Выбирает все элементы с четными индексами в наборе отобранных элементов. Заметьте, что индексы начинаются с 0, таким образом в действительности отбираются 1-й, 3-й и так далее элементы. | // Выбираем 1й, 3й, 5й, и так далее параграфы, которые имеют класс "myClass": |
:odd |
Выбирает все элементы с нечетными индексами в наборе уже отобранных элементов. Заметьте, что индексы начинаются с 0, таким образом в действительности отбираются 2-й, 4-й и так далее элементы | // Выбираем 2й, 4й, 6й, и так далее параграфы, которые имеют класс "myClass": |
Отметим, что данные селекторы не работают также как :first-child
, :last-child
, и так далее. Например, li.myClass:first-child
выбирает только пункт списка с классом "myClass"
, который является первым пунктом в соответствующем списке. А li.myClass:first
находит все пункты списка на странице, которые имеют класс "myClass"
, а затем выбирает первый пункт списка в наборе результата поиска.
В следующем примере выбираются все ячейки в первых двух строках таблицы, которая имеет ID "myTable"
:
var selectedElements = $("table#myTable tr:lt(2) > td");
Другие полезные селекторы jQuery
Если ни один из перечисленных селекторов не помог вам выделить нужные элементы, попробуйте использовать следующие селекторы:
Селектор | Описание | Пример |
---|---|---|
:not() |
Выбирает все элементы, которые не соответствуют заданному слектору. | // Выбираем все параграфы, которые не имеют класса "myClass": |
:animated |
Выбирает все элементы, которые в текущий момент анимируются jQuery (например, затухают). | // Выбираем все div, которые анимируются в текущий момент: |
:hidden |
Выбирает все скрытые элементы. Элемент полагается “скрытым” если: его свойство display установлено в значение "none" ; поля формы – type "hidden" ; если ширина и высота установлены в 0; если один из элементов, которые содержат заданный элемент является скрытым. Однако, элемент не считается “скрытым” если только его свойство visibility установлено в значение "hidden" . |
// Выбираем все скрытые праграфы, которые имеют класс "myClass": |
:visible |
Выбирает все видимые элементы. Это противоположный селектор для :hidden . |
// Выбираем все видимые параграфы, которые имеют класс "myClass": |
:header |
выбирает все элементы заголовков (h1 , h2 и так далее). |
// Выбираем все заголовки, которые имеют класс "myClass": |
В следующем примере выбираются все элементы на странице, кроме заголовков h1
:
var selectedElements = $(":header:not(h1)");
Заключение
В данной статье мы рассмотрели, как выбирать элементы с помощью селекторов jQuery. Были разобраны следующие типы селекторов:
- Основные селекторы, которые будут использоваться большую часть времени работы над проектом
- Селекторы атрибутов для выбора элементов на основе имен атрибутов и их значений
- Селекторы содержания, которые позволяют выбирать элементы на основе их содержания
- Иерархические селекторы, которые можно использовать для выбора элементов на основе их взаимоотношений с другими элементами на странице
- Селекторы полей формы, которые обеспечивают простой способ выбора различных элементов полей формы
- Селекторы положения для выбора элементов в соответствии с их положением в наборе элементов
- Дополнительные селекторы, такие как
:not()
для выбора элементов, не соответствующих селектору, и:animated
для выбора анимированных элементов
ПС – статья полный копипаст из оригинала. Оригинал статьи – http://ruseller.com/lessons.php?id=682