JS метод Document.querySelectorAll()


Загальний опис

Метод querySelectorAll() представляє собою важливий інструмент у бібліотеці методів об'єкта Document у JavaScript, розроблений для вибору множини елементів, що відповідають заданому CSS-селектору. Відрізняючись від querySelector(), що повертає перший знайдений елемент, querySelectorAll() повертає усі елементи в документі, які відповідають зазначеному селектору, у формі NodeList. Ця можливість робить querySelectorAll() незамінним інструментом для роботи з комплексними веб-документами, дозволяючи розробникам легко знаходити та маніпулювати декількома елементами одночасно.

Метод querySelectorAll() використовується для виконання широкого спектру завдань від простого пошуку елементів для читання або зміни їх властивостей до складніших операций, таких як масове призначення обробників подій або динамічне змінення стилів. Оскільки метод повертає NodeList, він дозволяє виконувати ітерацію по знайденим елементам за допомогою циклів або методів масивів (у сучасних браузерах), що робить його особливо потужним для роботи з динамічним вмістом.

Використання методу

Простий приклад використання querySelectorAll() може виглядати наступним чином:

// Знаходження усіх елементів <p> на сторінці
var paragraphs = document.querySelectorAll("p");
// Встановлення кольору тексту кожного параграфа в червоний
paragraphs.forEach(function(paragraph) {
    paragraph.style.color = "red";
});

Цей код демонструє базове застосування querySelectorAll() для знаходження усіх елементів <p> на сторінці та зміни кольору їх тексту на червоний. Використання методу forEach дозволяє легко ітерувати через кожен елемент в NodeList.

Складніші приклади

querySelectorAll() підтримує складні селектори, що дозволяє розробникам виконувати детальний пошук в DOM. Наприклад, якщо потрібно знайти всі елементи, що мають певний клас і знаходяться в межах елементів із певним ідентифікатором, можна використовувати такий код:

// Знаходження усіх елементів з класом .example, що знаходяться в межах #container
var exampleElements = document.querySelectorAll("#container .example");
// Додавання класу .highlighted до кожного знайденого елемента
exampleElements.forEach(function(element) {
    element.classList.add("highlighted");
});

Цей приклад демонстру

є використання querySelectorAll() для знаходження елементів за допомогою комбінованих селекторів і маніпулювання цими елементами шляхом додавання нового класу.

Розширені можливості

Оскільки querySelectorAll() повертає статичний NodeList, він не відображає зміни в DOM, що відбуваються після його виклику. Це означає, що якщо документ змінюється (наприклад, нові елементи додаються за відповідними селекторами), вам потрібно знову викликати querySelectorAll(), щоб отримати оновлений список елементів. Така поведінка робить метод особливо надійним при роботі з динамічними веб-додатками, де вміст сторінки може змінюватися в результаті взаємодій користувача або асинхронних запитів до сервера.

Застосування querySelectorAll() є фундаментальним у сучасній веб-розробці, надаючи розробникам могутній інструмент для ефективної роботи з елементами DOM. Його здатність виконувати пошук за складними селекторами та легкість в ітерації по знайденим елементам робить його незамінним у розробці інтерактивних та динамічно змінних веб-сторінок.

автор: Bond

Порада

querySelectorAll() дозволяє використовувати складні селектори, включно з комбінаціями класів, ідентифікаторів, атрибутів та псевдокласів. Це надає потужний інструмент для точного вибору елементів у вашому HTML. Наприклад, ви можете легко знайти всі елементи, які мають певний клас та знаходяться в специфічному контейнері.

автор: Bond
Порада

Хоча querySelectorAll() повертає NodeList, який схожий на масив, він не володіє всіма методами масиву, такими як map або reduce. Для використання цих методів, спершу потрібно перетворити NodeList на масив, використовуючи Array.from() або оператор розпаковування ....

автор: Bond
Порада

Використовуйте querySelectorAll() для оптимізації продуктивності вашого коду, особливо при роботі з великими документами. Замість того, щоб викликати getElementById() або getElementsByClassName() кілька разів, querySelectorAll() дозволяє здійснити складний пошук за один раз. Однак, будьте обережні з використанням складних селекторів, оскільки вони можуть сповільнити виконання вашого коду.

автор: Bond

Синтаксис

querySelectorAll(selectors)

Параметри

selectors

Рядок, що містить один або кілька селекторів для порівняння. Цей рядок мусить бути валідним CSS селектором; у випадку невідповідності буде сгенеровано виняток SyntaxError.

Можна вказати декілька селекторів, розділивши їх комами.

автор: Bond

Повернення

NodeList

Повертає неактивний NodeList, який містить об'єкт Element для кожного елемента, що відповідає принаймні одному з вказаних селекторів, або порожній NodeList у випадку відсутності збігів. Зауважте: якщо серед вказаних селекторів присутній CSS псевдо-елемент, повернутий список завжди буде порожнім.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 3.5 3.1 10 12 9
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 2

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі ми демонструємо базове використання методу Document.querySelectorAll(), що дозволяє вибрати всі елементи на сторінці, які відповідають заданому CSS-селектору. Це дуже корисно для застосувань, які потребують роботи з множиною елементів, наприклад, для зміни стилів або вмісту одночасно.

HTML

<div class="message">перший елемент message</div>
<div class="message">другий елемент message</div>

JS

// Маємо HTML-структуру з кількома параграфами
// <p class="message">Повідомлення 1</p>
// <p class="message">Повідомлення 2</p>
// <p class="message">Повідомлення 3</p>

// Використовуємо `Document.querySelectorAll()` для вибору всіх параграфів з класом 'message'
var messages = document.querySelectorAll(".message");

// Змінюємо текст кожного параграфа
messages.forEach(function(msg) {
    msg.textContent = "Оновлене повідомлення";
});
автор: Bond

У цьому прикладі ми покажемо, як Document.querySelectorAll() може бути використаний для додавання стилів до різних елементів за умовами. Наприклад, ми хочемо змінити колір фону для всіх параграфів, які містять певний клас, але лише якщо вони містять конкретний текст.

HTML

<div class="highlight">перший елемент highlight</div>
<div class="highlight">другий елемент highlight</div>

JS

// Маємо HTML-структуру з кількома параграфами, деякі з яких містять клас 'highlight'
// <p class="highlight">Текст для виділення</p>
// <p>Звичайний текст</p>
// <p class="highlight">Інший текст для виділення</p>

// Використовуємо `Document.querySelectorAll()` для вибору всіх параграфів з класом 'highlight'
var highlighted = document.querySelectorAll(".highlight");

highlighted.forEach(function(item) {
    // Перевіряємо, чи містить параграф текст 'виділення'
    if (item.textContent.includes("виділення")) {
        // Змінюємо колір фону на жовтий
        item.style.backgroundColor = "yellow";
    }
});
автор: Bond

У цьому прикладі, коли користувач взаємодіє з чекбоксом, обробник подій change активується і застосовує або видаляє клас dark-theme до кожного елемента з класом content. Це змінює стилі відповідних елементів згідно з визначеннями в CSS. За допомогою Document.querySelectorAll('.content') ми отримуємо всі елементи, які потрібно модифікувати, а метод forEach дозволяє нам застосувати зміни до кожного з них. Цей приклад ілюструє гнучкість і потужність Document.querySelectorAll() для управління множиною елементів на сторінці.

автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід