Методы querySelector и querySelectorAll

Anton Shein
2 min readMar 3, 2018

Раньше найти какой-то элемент на веб-странице при помощи JavaScript было не так просто. Были методы document.getElementById(), document.getElementsByTagName() и т. п.

Это было настолько неудобно и при этом требовалось так часто, что jQuery завоевал огромную популярность хотя бы за то, что при помощи него можно было искать элементы просто передав произвольный CSS-селектор в параметрах функции, например: $('ul.products li') .

К счастью, в современном JS теперь тоже можно легко найти элементы по произвольному CSS-селектору без помощи сторонних библиотек.

Метод querySelector находит первый элемент, подходящий условию и возвращает его, а querySelectorAll находит все элементы и возвращает их список.

// Найдёт первый элемент с классом thumb на странице
var firstThumb = document.querySelector('.thumb');
// Найдёт все элементы с классом thumb на странице
var thumbs = document.querySelectorAll('.thumb');
// Найдёт все тэги LI вложенные в тег UL
var types = document.querySelectorAll('ul li');

Этот список очень похож на массив, даже при выводе через console.log() выглядит именно так. Но при этом он не является массивом. Например, у него нельзя вызвать метод map.

// Этот код выдаст ошибку
document.querySelectorAll('li').map(el => el.innerText);

Чтобы обойти этот недостаток, можно воспользоваться оператором расширения ... из ES6.

// А вот такой код — сработает 
[...document.querySelectorAll('li')].map(el => el.innerText);

Искать элементы при помощи этих методов можно на всей странице или в конкретном элементе, который был найден ранее.

// Поиск всех тэгов P на странице
var paragraphsList = document.querySelectorAll(’p’);
// Поиск всех тегов B внутри первого тега P, который мы нашли ранее
var b = paragraphsList[0].querySelectorAll(’b’);

В этих методах можно использовать почти любые CSS-селекторы, за исключением селекторов псевдо-селекторов (:hover, ::after и т. п.).

Эти методы очень удобны при прототипировании. Например, при помощи них можно через консоль разработчика получить данные с любой веб-страницы, сохранить их в JSON и вставить в Sketch, сэкономив силы на создании контента.

Вот пример, в котором можно поиграться с кодом и опробовать метод на практике:

Подписывайтесь на Телеграм-канал про дизайн, технологии и прототипирование «Детепр» (t.me/detepr).

--

--

Anton Shein

Дизайн продуктов, технологии и прототипирование