Наповнення JS розділу

Добридень, Пані та Панове, завдяки вам вдалося зібрати більше 19тис грн з необхідних 15тис на впровадження JS розділу.

JS розділ вже впроваджено - переходимо до його наповнення і почнемо бігти довгий марафон, адже JS має більше 1100 різноманітних методів, властивостей, подій і т.д., які необхідно описати.

Будемо працювати, і вдень, і вночі, щоб орієнтовно взимку закінчити наповнювати JS розділ!

Ви також можете допомогти нам в цьому. Долучайтеся до нашої спільноти в дискорді - ставайте її частиною і допомагайте нашому розвитку.

Також, підтримуйте нас матеріально.

JS метод Element.querySelectorAll()

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

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

Синтаксис методу querySelectorAll() подібний до querySelector():

elementOrDocument.querySelectorAll(селектор);

Тут elementOrDocument - це вихідний елемент або об'єкт document, з якого починається пошук, а селектор - це рядок, що містить селектор CSS, за яким здійснюється пошук елементів.

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

// Вибір усіх елементів з класом "highlight"
const highlightedElements = document.querySelectorAll('.highlight');

// Вибір усіх посилань на зовнішні ресурси
const externalLinks = document.querySelectorAll('a[target="_blank"]');

// Вибір усіх елементів `li` всередині елемента з ідентифікатором "nav"
const navItems = document.querySelector('#nav').querySelectorAll('li');

Після того, як елементи були вибрані, ви можете виконувати різноманітні операції з ними, наприклад, змінювати їх стилі, додавати або видаляти класи, маніпулювати їх вмістом або обробляти події. Для цього ви можете використовувати цикли або методи масивів, такі як forEach(), map() або filter():

// Змінити колір тексту для всіх виділених елементів
const highlightedElements = document.querySelectorAll('.highlight');
highlightedElements.forEach(element => {
  element.style.color = 'red';
});

// Додати клас "active" до кожного елемента навігації
const navItems = document.querySelectorAll('#nav li');
navItems.forEach(item => item.classList.add('active'));

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

const articleBody = document.querySelector('article');
const paragraphs = articleBody.querySelectorAll('p');

Слід зазначити, що querySelectorAll() повертає статичну колекцію (NodeList) елементів, а не динамічний масив. Це означає, що якщо після виклику querySelectorAll() на сторінці з'являться нові елементи, що відповідають селектору, вони не будуть автоматично додані до колекції. Якщо вам потрібно працювати з динамічною колекцією, розгляньте можливість використання getElementsByClassName() або перетворення NodeList на масив за допомогою Array.from().

Порада:

Комбінуйте querySelectorAll() з методами масивів для ефективної обробки колекції елементів. Наприклад, ви можете використати filter() для отримання підмножини елементів, що відповідають певній умові, або map() для застосування функції до кожного елемента колекції:

const links = document.querySelectorAll('a');
const externalLinks = Array.from(links).filter(link => link.target === '_blank');
const linkTexts = externalLinks.map(link => link.textContent);
Порада:

Будьте обережні при використанні складних селекторів CSS у querySelectorAll(). Хоча вони можуть бути зручними, їх використання може негативно вплинути на продуктивність, особливо якщо вони застосовуються до великих фрагментів DOM. У таких випадках розгляньте можливість використання більш простих селекторів або альтернативних методів, таких як getElementsByClassName().

Порада:

Пам'ятайте, що querySelectorAll() повертає статичну колекцію (NodeList) елементів. Це означає, що якщо після виклику querySelectorAll() на сторінці з'являться нові елементи, що відповідають селектору, вони не будуть автоматично додані до колекції. Якщо вам потрібно працювати з динамічною колекцією, розгляньте можливість використання getElementsByClassName() або перетворення NodeList на масив за допомогою Array.from().

Синтаксис

querySelectorAll(selectors)

Параметри

*selectors

Рядок, що містить один або більше селекторів CSS для вибору елементів. Це має бути коректний рядок селектора CSS, інакше буде згенеровано виняток SyntaxError. Кілька селекторів можна зазначити, розділивши їх комами.

Return

NodeList

Повертає статичну колекцію (NodeList) елементів, що містить один об'єкт Element для кожного нащадка, який відповідає принаймні одному із зазначених селекторів CSS. Якщо жодний елемент не відповідає селектору, повертається порожня колекція. Важливо зазначити, що якщо вказані селектори включають CSS псевдоелемент, повернена колекція завжди буде порожньою, оскільки псевдоелементи не вважаються нащадками у дереві DOM.

Exception

SyntaxError: Це виключення генерується, якщо синтаксис зазначеного рядка селекторів некоректний і не відповідає правилам CSS. Перед використанням querySelectorAll() необхідно переконатися, що рядок селектора складений правильно.

Переглядачі

Переглядач

1

3.5

3.1

10

12

Переглядач

4.4

18

4

2

Переглядач

-

-

Приклади


У цьому прикладі використовується метод querySelectorAll() для знаходження всіх елементів з класом toggle-checkbox (чекбокси для вибору елементів) та всіх елементів контенту (заголовки h3, абзаци p та елементи span).

Приклад демонструє, як можна використовувати querySelectorAll() для маніпулювання кількома групами елементів на веб-сторінці. Користувач може вибрати, які типи елементів (p, h3, span) повинні бути показані або приховані, встановлюючи або знімаючи відмітки в чекбоксах. Після зміни стану чекбокса JavaScript-код ітерується по всіх відповідних елементах контенту та встановлює їх властивість display на block (показати) або none (приховати) відповідно до вибору користувача.

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

Важливою особливістю цього прикладу є те, що він показує, як querySelectorAll() повертає статичну колекцію елементів, яка не автоматично оновлюється при змінах у DOM. Це означає, що якщо елементи додаються або видаляються після виклику querySelectorAll(), колекція не буде відображати ці зміни. Якщо потрібно отримувати динамічну колекцію, яка оновлюється при змінах у DOM, слід використовувати метод getElementsBy* або querySelector* у поєднанні з властивістю live.

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

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

// Знаходимо всі елементи з класом "highlight"
const highlightedElements = document.querySelectorAll('.highlight');

// Ітеруємо по всіх знайдених елементах
highlightedElements.forEach(element => {
  // Змінюємо колір тексту елемента
  element.style.color = 'red';
});

У цьому прикладі метод querySelectorAll() використовується для знаходження всіх елементів <a> (посилань) на веб-сторінці. Потім ці елементи фільтруються за допомогою методу filter() для вибору лише тих посилань, які ведуть на зовнішні сайти. Після цього до відфільтрованих елементів додається клас external-link.

// Знаходимо всі елементи <a> (посилання)
const links = document.querySelectorAll('a');

// Фільтруємо посилання, які ведуть на зовнішні сайти
const externalLinks = Array.from(links).filter(link => {
  const linkHost = new URL(link.href).host;
  const currentHost = window.location.host;
  return linkHost !== currentHost;
});

// Додаємо клас "external-link" до зовнішніх посилань
externalLinks.forEach(link => {
  link.classList.add('external-link');
});