--- title: Document.querySelectorAll() slug: Web/API/Document/querySelectorAll tags: - API - DOM - Document - Method - Selectors translation_of: Web/API/Document/querySelectorAll ---
Метод querySelectorAll()
{{domxref("Document")}} возвращает статический (не динамический) {{domxref("NodeList")}}, содержащий все найденные элементы документа, которые соответствуют указанному селектору.
Примечание: Данный метод реализован на основе миксина {{domxref("ParentNode")}} {{domxref("ParentNode.querySelectorAll", "querySelectorAll()")}} метода.
elementList = document.querySelectorAll(selectors);
selectors
SyntaxError
. Смотрите Поиск элементов DOM с использованием селекторов для получения информации о том, распознавать элементы. Несколько селекторов нужно разделить запятыми.Примечание: Символы, которые не являются частью стандартного синтаксиса CSS, должны быть экранированы с помощью символа обратной косой черты (\
). Поскольку в JavaScript также используется экранирование обратной косой черты, при написании строковых литералов с использованием этих символов следует соблюдать особую осторожность. Для более подробной информации смотри {{anch("Escaping special characters")}}.
Статический (non-live) {{domxref("NodeList")}}, содержащий все элементы в пределах документа, которые соответствуют как минимум одному из указанных селекторов, или пустой {{domxref("NodeList")}} в случае отсутствия совпадений.
Примечание: Если в строке selectors
содержатся CSS псевдоэлементы, то возвращаемый список будет всегда пуст.
SyntaxError
SYNTAX_ERR
происходит в случае передачи некорректной группы селекторов.Чтобы получить {{domxref("NodeList")}} всех элементов {{HTMLElement("p")}} в документе:
var matches = document.querySelectorAll("p");
В этом примере возвращается список всех элементов {{HTMLElement ("div")}} в документе, которые имеют класс note
или alert
:
var matches = document.querySelectorAll("div.note, div.alert");
Здесь мы получаем список элементов <p>
, чьим непосредственным родительским элементом явялется {{HTMLElement("div")}} с классом highlighted
, который расположен внутри контейнера с идентификатором test
.
var container = document.querySelector("#test"); var matches = container.querySelectorAll("div.highlighted > p");
В этом примере используются селекторы атрибутов, чтобы вернуть список элементов {{HTMLElement("iframe")}}, которые содержат атрибут data-src
:
var matches = document.querySelectorAll("iframe[data-src]");
Здесь селектор атрибута используется для возврата элементов списка, содержащихся в списке с идентификатором "userlist"
, который имеет атрибут "data-active"
со значением "1"
:
var container = document.querySelector("#userlist"); var matches = container.querySelectorAll("li[data-active='1']");
Вернув {{domxref("NodeList")}} совпадений один раз, вы можете использовать его как простой массив. Если массив пустой (т. е. свойство length
равно 0), то совпадений не было найдено.
В другом случае, вы можете использовать стандартную запись массива для доступа к содержимому. Вы можете использовать любой оператор зацикливания, например:
var highlightedItems = userList.querySelectorAll(".highlighted"); highlightedItems.forEach(function(userItem) { deleteUser(userItem); });
querySelectorAll()
ведёт себя не так, как большинство библиотек JavaScript DOM. Это может привести к неожиданным результатам.
Рассмотрим этот HTML с тремя вложенными {{HTMLElement("div")}} блоками.
<div class="outer"> <div class="select"> <div class="inner"> </div> </div> </div>
var select = document.querySelector('.select'); var inner = select.querySelectorAll('.outer .inner'); inner.length; // 1, не 0!
В данном примере, когда мы выбрали ".outer .inner"
в контексте <div>
с классом "select"
, элемент с классом ".inner"
был всё равно найден, хотя .outer
не является потомком элемента в котором происходил поиск (".select"
). По умолчанию, querySelectorAll()
проверяет только последний элемент без учёта контекста.
Псевдокласс {{cssxref(":scope")}} даёт нам ожидаемый результат. Только соответстующие селекторы в потомках базового элемента:
var select = document.querySelector('.select'); var inner = select.querySelectorAll(':scope .outer .inner'); inner.length; // 0
Спецификация | Статус | Комментарий |
---|---|---|
{{SpecName("DOM WHATWG", "#dom-parentnode-queryselectorall", "ParentNode.querySelectorAll()")}} | {{Spec2("DOM WHATWG")}} | Живой стандарт |
{{SpecName("Selectors API Level 2", "#dom-parentnode-queryselectorall", "ParentNode.querySelectorAll()")}} | {{Spec2("Selectors API Level 2")}} | Без изменений |
{{SpecName("DOM4", "#dom-parentnode-queryselectorall", "ParentNode.querySelectorAll()")}} | {{Spec2("DOM4")}} | Изначальное определение |
{{SpecName("Selectors API Level 1", "#interface-definitions", "document.querySelector()")}} | {{Spec2("Selectors API Level 1")}} | Оригинальное определение |
{{Compat("api.Document.querySelectorAll")}}
querySelector