JS об'єкт NodeList
Введення до `NodeList`
NodeList - це об'єкт, що представляє собою колекцію вузлів, яку можна отримати за допомогою таких методів, як querySelectorAll. Важливо розуміти, що NodeList не є масивом, хоча і має певні подібні до масиву властивості, такі як доступ до елементів за індексом та властивість length.
Приклад 1: Отримання NodeList
let divs = document.querySelectorAll('div');
console.log(divs.length);
У цьому прикладі ми отримуємо всі елементи div на сторінці і виводимо їх кількість.
Робота з елементами NodeList
Ви можете перебирати елементи NodeList за допомогою циклу. Однак, відмінно від масивів, у NodeList немає методів, таких як forEach, map, але ви все одно можете використовувати їх, перетворивши NodeList на масив.
Приклад 2: Перебір NodeList
let paragraphs = document.querySelectorAll('p');
paragraphs.forEach(p => {
p.style.color = 'red';
});
У цьому прикладі ми змінюємо колір тексту всіх параграфів на червоний. Оскільки forEach не є вбудованим методом NodeList, ми можемо користуватися ним безпосередньо.
Отримання вузлів за індексом
Оскільки NodeList має подібні до масиву характеристики, ви можете отримувати доступ до окремих вузлів за допомогою індексу. Наприклад, nodes[0] поверне перший вузол у списку.
Приклад 3:
let buttons = document.querySelectorAll('button');
let firstButton = buttons[0];
console.log(firstButton.textContent);
Тут ми отримуємо текст першої кнопки на сторінці.
Відмінність від HTMLCollection
Може виникнути замішання між NodeList та HTMLCollection. Основна відмінність полягає в тому, що NodeList може містити будь-який тип вузла, тоді як HTMLCollection містить лише елементи. Крім того, методи доступу різняться. Наприклад, NodeList, отриманий за допомогою querySelectorAll, не "живий", в той час як більшість HTMLCollection автоматично оновлюється при змінах у DOM.
Недоступні методи масиву
Помітимо, що хоча NodeList і має індексований доступ та властивість length, він не має багатьох інших методів масиву. Це може призвести до плутанини. Якщо вам потрібно використовувати такі методи, як map, filter або reduce, спочатку конвертуйте NodeList у масив.
Приклад 4:
let nodes = document.querySelectorAll('.item');
let nodeTexts = Array.from(nodes).map(node => node.textContent);
У цьому прикладі ми отримуємо текст з кожного вузла з класом 'item'.
| Нотатка: |
|
| Нотатка: | Багато новачків часто плутають Конвертація
У цьому прикладі ми перетворюємо |
| Порада: | Не модифікуйте DOM під час ітерації. Якщо ви працюєте з "живим" |
| Порада: | Пам'ятайте різницю між |
| Порада: | Використовуйте |
Синтаксис
let nodes = document.querySelectorAll(selector);
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
1 |
1 |
1 |
8 |
12 |
| Переглядач | ||||
|---|---|---|---|---|
4.4 |
18 |
4 |
1 |
| Переглядач | ||
|---|---|---|
0.10.0 |
1.0 |
Приклади
У цьому прикладі ми використовуємо метод querySelectorAll для отримання всіх елементів зображення на веб-сторінці та виведення їх кількості в консоль. Це корисно, якщо ви хочете швидко перевірити, скільки зображень на вашій веб-сторінці.
let images = document.querySelectorAll('img');
console.log(`На сторінці ${images.length} зображень.`);
Тут ми шукаємо всі елементи з класом 'highlight' і змінюємо колір їх тексту на червоний. Це корисно, коли потрібно виконати стилізацію для групи елементів на основі їх класу або інших атрибутів.
let highlightedText = document.querySelectorAll('.highlight');
highlightedText.forEach(element => {
element.style.color = 'red';
});
У цьому прикладі ми спочатку отримуємо всі посилання на сторінці, потім перетворюємо NodeList у масив. Після цього фільтруємо посилання, щоб залишити тільки ті, що починаються з 'https://', і створюємо новий масив із цих URL-адрес. Це може бути корисно, якщо ви хочете працювати тільки з безпечними посиланнями або проводити іншу специфічну обробку.
let links = document.querySelectorAll('a');
let hrefs = Array.from(links).filter(link => link.href.startsWith('https://')).map(link => link.href);
console.log(hrefs);
Методи
Властивості
length- Вказує кількість елементів у NodeList.
