Метод querySelector в JavaScript: выбор элементов с помощью селекторов CSS

В этом руководстве вы узнаете, как использовать методы JavaScript querySelector() и querySelectorAll() для поиска элементов на основе селекторов CSS.

querySelector() — это метод интерфейса Element. Метод позволяет выбрать первый элемент, соответствующий одному или нескольким селекторам CSS.

Ниже показан синтаксис метода querySelector() :

let element = parentNode.querySelector(selector);

В этом синтаксисе selector является селектором CSS или группой селекторов CSS для соответствия элементам-потомкам parentNode.

Если selector не является допустимым синтаксисом CSS, метод вызовет исключение SyntaxError.

Если ни один элемент не соответствует селекторам CSS, querySelector() возвращает null.

Метод querySelector() доступен для объекта document или любого объекта Element.

Помимо querySelector(), вы можете использовать метод querySelectorAll() для выбора всех элементов, соответствующих селектору CSS или группе селекторов CSS:

let elementList = parentNode.querySelectorAll(selector);

Метод querySelectorAll() возвращает статический NodeList элементов, соответствующих селектору CSS. Если ни один элемент не соответствует, он возвращает пустой NodeList.

Обратите внимание, что NodeList — это объект, подобный массиву, а не объект массива. Однако в современных веб-браузерах вы можете использовать метод forEach() или цикл for…

Чтобы преобразовать NodeList в массив, вы используете метод Array.from() следующим образом:

let nodeList = document.querySelectorAll(selector);
let elements = Array.from(nodeList);

Основные селекторы

Предположим, у вас есть следующий HTML-документ:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>querySelector() Demo</title>
</head>
<body>
    <header>
        <div id="logo">
            <img src="img/logo.jpg" alt="Logo" id="logo">
        </div>
        <nav class="primary-nav">
            <ul>
                <li class="menu-item current"><a href="#home">Home</a></li>
                <li class="menu-item"><a href="#services">Services</a></li>
                <li class="menu-item"><a href="#about">About</a></li>
                <li class="menu-item"><a href="#contact">Contact</a></li>
            </ul>
        </nav>
    </header>
    <main>
        <h1>Welcome to the JS Dev Agency</h1>

        <div class="container">
            <section class="section-a">
                <h2>UI/UX</h2>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Autem placeat, atque accusamus voluptas
                    laudantium facilis iure adipisci ab veritatis eos neque culpa id nostrum tempora tempore minima.
                    Adipisci, obcaecati repellat.</p>
                <button>Read More</button>
            </section>
            <section class="section-b">
                <h2>PWA Development</h2>
                <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Magni fugiat similique illo nobis quibusdam
                    commodi aspernatur, tempora doloribus quod, consectetur deserunt, facilis natus optio. Iure
                    provident labore nihil in earum.</p>
                <button>Read More</button>
            </section>
            <section class="section-c">
                <h2>Mobile App Dev</h2>
                <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Animi eos culpa laudantium consequatur ea!
                    Quibusdam, iure obcaecati. Adipisci deserunt, alias repellat eligendi odit labore! Fugit iste sit
                    laborum debitis eos?</p>
                <button>Read More</button>
            </section>
        </div>
    </main>
    <script src="js/main.js"></script>
</body>
</html>

1) Универсальный селектор

Универсальный селектор обозначается *, который соответствует всем элементам любого типа:

*

В следующем примере используется querySelector() выбора первого элемента в документе:

let element = document.querySelector('*');

Выберет все элементы в документе:

let elements = document.querySelectorAll('*');

2) Выбор типа

Чтобы выбрать элементы по имени узла, вы используете селектор типа, например, a выбирает все элементы <a> :

elementName

В следующем примере выполняется поиск первого элемента h1 в документе:

let firstHeading = document.querySelector('h1');

И следующий пример находит все элементы h2 :

let heading2 = document.querySelectorAll('h2');

3) Селектор класса

Чтобы найти элемент с заданным классом CSS, вы используете синтаксис селектора класса:

.className

В следующем примере выполняется поиск первого элемента с классом menu-item :

let note = document.querySelector('.menu-item');

И следующий пример находит все элементы с menu :

let notes = document.querySelectorAll('.menu-item');

4) Выбор идентификатора

Чтобы выбрать элемент на основе значения его идентификатора, вы используете синтаксис селектора идентификатора:

#id

В следующем примере выполняется поиск первого элемента с идентификатором #logo :

let logo = document.querySelector('#logo');

Поскольку id должен быть уникальным в документе, querySelectorAll() не имеет значения.

5) Селектор атрибутов

Чтобы выбрать все элементы, имеющие заданный атрибут, вы используете один из следующих синтаксисов селектора атрибута:

[attribute]
[attribute=value]
[attribute~=value]
[attribute|=value]
[attribute^=value]
[attribute$=value]
[attribute*$*=value]

В следующем примере выполняется поиск первого элемента с атрибутом [autoplay] с любым значением:

let autoplay = document.querySelector('[autoplay]');

И следующий пример находит все элементы, которые имеют [autoplay] с любым значением:

let autoplays = document.querySelectorAll('[autoplay]');

Группировка

Чтобы сгруппировать несколько селекторов, используйте следующий синтаксис:

selector, selector, ...

Список селекторов будет соответствовать любому элементу с одним из селекторов в группе.

Следующий пример находит все <div> и <p> :

let elements = document.querySelectorAll('div, p');

Комбинаторы

1) Комбинатор descendant

Чтобы найти потомков узла, вы используете синтаксис комбинатора space( ):

selector selector

Например, p a будет соответствовать всем элементам <a> внутри элемента p :

let links = document.querySelector('p a');

2) Детский комбинатор

Комбинатор дочерних элементов > находит все элементы, которые являются прямыми дочерними элементами первого элемента:

selector > selector

В следующем примере выполняется поиск всех элементов li, находящихся непосредственно внутри элемента <ul> :

let listItems = document.querySelectorAll('ul > li');

Чтобы выбрать все элементы li, которые находятся непосредственно внутри элемента <ul> с классом nav :

let listItems = document.querySelectorAll('ul.nav > li');

3) Общий родственный комбинатор

Комбинатор ~ выбирает братьев и сестер, которые имеют одного и того же родителя:

selector ~ selector

Например, p ~ a будет соответствовать всем элементам <a>, которые следуют за элементом p, сразу или нет:

let links = document.querySelectorAll('p ~ a');

4) Соседний родственный комбинатор

Комбинатор смежных братьев и сестер + выбирает смежных братьев и сестер:

selector + selector

Например, h1 + a соответствует всем элементам, которые непосредственно следуют за h1 :

let links = document.querySelectorAll('h1 + a');

И выберите первый <a>, который следует непосредственно за h1 :

let links = document.querySelector('h1 + a');

Псевдо

1) Псевдоклассы

: элемент на основе их состояний:

element:state

Например, li:nth-child(2) выбирает второй элемент <li> в списке:

let listItem = document.querySelectorAll('li:nth-child(2)');

2) Псевдоэлементы

:: представляет объекты, которые не включены в документ.

Например, p::first-line соответствует первой строке всех элементов div :

let links = document.querySelector('p::first-line');

Заключение

  • querySelector() находит первый элемент, соответствующий селектору CSS или группе селекторов CSS.
  • querySelectorAll() находит все элементы, соответствующие селектору CSS или группе селекторов CSS.
  • Селектор CSS определяет элементы, к которым применяется правило CSS.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript