Document.querySelectorAll()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Метод querySelectorAll()
Document
возвращает статический (не динамический) NodeList
, содержащий все найденные элементы документа, которые соответствуют указанному селектору.
Примечание:
Данный метод реализован на основе миксина ParentNode
querySelectorAll()
метода.
Синтаксис
elementList = document.querySelectorAll(selectors);
Параметры
selectors
-
Строка
DOMString
, содержащая один или более CSS селектор. Эта строка должна быть валидным CSS селектором. Если это не так, то генерируетсяSyntaxError
. Смотрите Поиск элементов DOM с использованием селекторов для получения информации о том, распознавать элементы. Несколько селекторов нужно разделить запятыми.
Примечание:
Символы, которые не являются частью стандартного синтаксиса CSS, должны быть экранированы с помощью символа обратной косой черты (\
). Поскольку в JavaScript также используется экранирование обратной косой черты, при написании строковых литералов с использованием этих символов следует соблюдать особую осторожность. Для более подробной информации смотри Escaping special characters.
Возвращаемое значение
Статический (non-live) NodeList
, содержащий все элементы в пределах документа, которые соответствуют как минимум одному из указанных селекторов, или пустой NodeList
в случае отсутствия совпадений.
Примечание:
Если в строке selectors
содержатся CSS псевдоэлементы, то возвращаемый список будет всегда пуст.
Исключения
SyntaxError
-
Исключение
SYNTAX_ERR
происходит в случае передачи некорректной группы селекторов.
Примеры
Получение списка совпадений
Чтобы получить NodeList
всех элементов в документе:
var matches = document.querySelectorAll("p");
В этом примере возвращается список всех элементов Здесь мы получаем список элементов В этом примере используются селекторы атрибутов, чтобы вернуть список элементов Здесь селектор атрибута используется для возврата элементов списка, содержащихся в списке с идентификатором Вернув В другом случае, вы можете использовать стандартную запись массива для доступа к содержимому. Вы можете использовать любой оператор зацикливания, например: Рассмотрим этот HTML с тремя вложенными В данном примере, когда мы выбрали Псевдокласс note
или alert
:
var matches = document.querySelectorAll("div.note, div.alert");
, чьим непосредственным родительским элементом является
highlighted
, который расположен внутри контейнера с идентификатором test
.
var container = document.querySelector("#test");
var matches = container.querySelectorAll("div.highlighted > p");
, которые содержат атрибут
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']");
Доступ к совпадениям
NodeList
совпадений один раз, вы можете использовать его как простой массив. Если массив пустой (т. е. свойство length
равно 0), то совпадений не было найдено.var highlightedItems = userList.querySelectorAll(".highlighted");
highlightedItems.forEach(function (userItem) {
deleteUser(userItem);
});
Примечания пользователя
querySelectorAll()
ведёт себя не так, как большинство библиотек JavaScript DOM. Это может привести к неожиданным результатам.HTML
JavaScript
var select = document.querySelector(".select");
var inner = select.querySelectorAll(".outer .inner");
inner.length; // 1, не 0!
".outer .inner"
в контексте "select"
, элемент с классом ".inner"
был всё равно найден, хотя .outer
не является потомком элемента в котором происходил поиск (".select"
). По умолчанию, querySelectorAll()
проверяет только последний элемент без учёта контекста.
:scope
даёт нам ожидаемый результат. Только соответствующие селекторы в потомках базового элемента:var select = document.querySelector(".select");
var inner = select.querySelectorAll(":scope .outer .inner");
inner.length; // 0
Спецификации
Specification DOM
# ref-for-dom-parentnode-queryselectorall①Совместимость с браузерами
Смотрите также