JavaScript метод Element.querySelector()
Определение и применение
JavaScript метод querySelector() объекта
Element
возвращает первый элемент, соответствующий указанной группе селекторов, который является потомком элемента на
котором был вызван метод. Если совпадений не найдено, то возвращается значение null.
Этот метод так же реализован как
Document.querySelector(), DocumentFragment.querySelector() и
ParentNode.querySelector().
Если вам необходим первый элемент в документе, который соответствует указанному селектору
или селекторам, то используйте для этого метод
querySelector()
объекта
Document.
Для того, чтобы возвратить статический (не живой) объект NodeList, представляющий список элементов,
соответствующих указанной группе селекторов, которые являются потомками элемента, на котором был вызван метод, вы
можете воспользоваться методом
querySelectorAll().
Поддержка браузерами
Спецификация: dom.spec.whatwg
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
querySelector | 1 | 12 | 3.5 | 10 | 3.1 | 18 | 4 | 10.1 | 2 | 1.0 | 4.4 | 2 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
const element = baseElement.querySelector(selectors);
Спецификация
Значения параметров
| Параметр | Описание |
|---|---|
selectors |
Аргумент должен соответствовать допустимой строке селектора, содержащей один или несколько селекторов. При
указании нескольких селекторов необходимо разделять значения запятыми. В этом случае будет возвращён первый в
порядке документа элемент, соответствующий любому из заданных селекторов. Если по какой-то причине вы используете в наименовании селекторов символы, которые не являются частью стандартного синтаксиса CSS, то при поиске такие символы должны быть экранированы с помощью символа обратной косой черты ( "\"). Поскольку обратная косая черта также является специальным символом (escape) в JavaScript, то при вводе литеральной строки ее необходимо экранировать дважды.
Обязательный параметр.
|
Исключения
| Тип исключения | Описание |
|---|---|
SyntaxError |
Возникает в том случае, если синтаксис указанного селектора или селекторов некорректен. |
Для значения id, включаемого в селектор, используйте CSS.escape(id): допустимый
HTML-идентификатор не обязательно допустим в CSS без экранирования. Неверный синтаксис селектора вызывает
SyntaxError.
Пример использования
Поиск первого пункта списка внутри блока
Нажмите , затем Click me: первый пункт списка внутри div станет оранжево-красным. Замените селектор 'li' на 'li:last-child' и сравните.
index.html
<button data-migration-click-0="">Click me</button>
<div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</div>
main.js
function myFunc() {
const myDiv = document.body.querySelector('div'),
firstLi = myDiv.querySelector('li')
firstLi.style.color = 'orangered'
}
// Обработчики кнопок перенесены из HTML для запуска с CSP без inline-скриптов.
document.querySelector('[data-migration-click-0]').addEventListener('click', function () {
myFunc()
})
document.querySelector('[data-migration-click-0]').removeAttribute('data-migration-click-0')
Нажмите , чтобы запустить пример.
В этом примере с использованием метода
addEventListener()
при нажатии на кнопку (HTML элемент
<button>) вызываем функцию myFunc(), которая с использованием JavaScript метода
querySelector() выбирает первый элемент
<div>
внутри элемента
<body>, затем с помощью этого же метода осуществляет поиск внутри выбранного элемента
<div>, и находит внутри него первый элемент
<li>. После этого устанавливает ему определенный цвет текста.
Границы поиска и экранирование id
Добавьте вложенный абзац. Сравните p и :scope > p; идентификатор с двоеточием требует CSS.escape(). Предок в селекторе может находиться вне выбранного элемента.
index.html
<section id="catalog">
<p id="item:1">Первый товар</p>
<div><p>Вложенный товар</p></div>
</section>
<pre id="result"></pre>
main.js
const catalog = document.querySelector('#catalog')
const id = 'item:1'
const found = catalog.querySelector('#' + CSS.escape(id))
document.querySelector('#result').textContent = [
'Экранированный id: ' + found.textContent,
'Все потомки p: ' + catalog.querySelectorAll('p').length,
'Только прямые дети: ' + catalog.querySelectorAll(':scope > p').length,
'Селектор с псевдоэлементом: ' + catalog.querySelectorAll('p, ::before').length,
'Предок вне области поиска: ' + catalog.querySelectorAll('body p').length,
].join('\n')
Нажмите , чтобы запустить пример.