JS метод NodeList.forEach()
Загальний опис
Метод forEach() є методом об'єкту NodeList, який дозволяє виконати надану функцію один раз для кожного елемента NodeList. Цей метод є зручним інструментом для маніпулювання вузлами DOM без необхідності явно проходити по циклу через NodeList. Він часто використовується для додавання обробників подій, зміни стилів або виконання будь-яких інших операцій з вузлами DOM.
Синтаксис методу forEach() виглядає наступним чином:
nodeList.forEach(callback, thisArg)
Перший аргумент callback є функцією, яка буде викликана для кожного елемента NodeList. Ця функція приймає три аргументи:
currentValue: поточний оброблюваний вузол.currentIndex(необов'язковий): індекс поточного вузла в NodeList.array(необов'язковий): NodeList, для якого був викликаний методforEach().
Другий аргумент thisArg є значенням, яке використовуватиметься як this при виконанні функції callback.
Розглянемо простий приклад використання forEach() для додавання обробника події натискання на всі кнопки на сторінці:
// Отримуємо всі кнопки на сторінці
const buttons = document.querySelectorAll('button');
// Додаємо обробник події натискання для кожної кнопки
buttons.forEach(function(button) {
button.addEventListener('click', function() {
console.log('Кнопку натиснуто!');
});
});
У цьому прикладі ми спочатку отримуємо NodeList всіх кнопок на сторінці за допомогою document.querySelectorAll('button'). Потім ми використовуємо метод forEach() для проходження по кожній кнопці в NodeList та додавання обробника події натискання за допомогою button.addEventListener('click', ...).
Метод forEach() також дозволяє передавати додатковий аргумент thisArg, який встановлює значення this всередині функції callback. Це може бути корисним, якщо вам потрібно отримати доступ до властивостей або методів об'єкта з функції callback. Наприклад:
const person = {
name: 'Іван',
greetButtons: function() {
const buttons = document.querySelectorAll('button');
buttons.forEach(function(button) {
button.addEventListener('click', function() {
console.log(`Привіт, ${this.name}!`);
}.bind(this));
}, this);
}
};
person.greetButtons();
У цьому прикладі ми використовуємо thisArg для передачі об'єкта person як значення this всередині функції callback. Таким чином, при натисканні на кнопку ми можемо отримати доступ до властивості name об'єкта person.
Метод forEach() є потужним інструментом для роботи з NodeList і часто використовується для маніпулювання вузлами DOM. Він забезпечує зручний спосіб виконання операцій з кожним елементом NodeList без необхідності явно проходити по циклу.
- Порада
-
Пам'ятайте, що метод
автор: BondforEach()не змінює оригінальний NodeList. Якщо вам потрібно створити новий масив або NodeList на основі існуючого, використовуйте методиArray.from()абоspread(...) оператор для перетворення NodeList в масив, а потім застосовуйте потрібні операції з масивом. - Порада
-
Якщо вам потрібно зупинити виконання
forEach()до того, як він досягне кінцяNodeList, ви можете використати інструкціюreturnвсередині функціїcallback. Це не зупинить повністю виконанняforEach(), але функціяcallbackбільше не буде викликатися для решти елементів NodeList. Наприклад:
автор: Bondconst links = document.querySelectorAll('a'); links.forEach(link => { if (link.href.startsWith('https://example.com')) { return; // Пропускаємо поточний елемент і переходимо до наступного } // Інші операції з посиланням }); - Порада
-
Якщо вам потрібно передати додаткові аргументи у функцію
callback, яку ви передаєте вforEach(), ви можете використати стрілкову функцію абоbind(). Це дозволить вам зберегти правильне значенняthisі передати додаткові аргументи в функціюcallback. Наприклад:
автор: Bondconst numbers = document.querySelectorAll('.number'); const multiplier = 2; numbers.forEach(number => { number.textContent = multiplyByNumber(parseInt(number.textContent), multiplier); }); function multiplyByNumber(num, multiplier) { return num * multiplier; }
Синтаксис
NodeList.forEach(callback)
NodeList.forEach(callback, thisArg)
Параметри
callback-
Функція для виконання над кожним елементом
автор: BondNodeList. thisArg-
Значення, що використовується як
автор: Bondthisпід час виконанняcallback.
Повернення
undefined-
Повертає
автор: Bondundefined.
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
| 51 | 50 | 10 | 38 | 16 |
| Переглядач | ||||
|---|---|---|---|---|
| 51 | 51 | 50 | 10 |
| Переглядач | ||
|---|---|---|
| - | - |
Приклади
+ запропонувати свій приклад у пісочниці
У цьому прикладі ми використовуємо метод forEach() для додавання обробників події натискання до всіх кнопок на сторінці. Цей приклад демонструє один з найпоширеніших випадків використання forEach() для маніпулювання вузлами DOM.
HTML
<button>Натисни</button>
JS
// Отримуємо всі кнопки на сторінці
const buttons = document.querySelectorAll('button');
// Додаємо обробник події натискання для кожної кнопки
buttons.forEach(function(button) {
button.addEventListener('click', function() {
console.log(`Кнопку "${button.textContent}" натиснуто!`);
});
});
Цей приклад демонструє, як за допомогою NodeList.forEach() можна змінити стиль кожного елемента списку при натисканні кнопки. Користувачі зможуть взаємодіяти зі списком, натискаючи на кнопку для зміни вигляду елементів.
У цьому прикладі ми використовуємо метод forEach() для створення інтерактивного списку завдань. Ми додаємо обробники подій до кожного елемента списку, що дозволяє користувачеві відзначати завдання як виконані або видаляти їх зі списку. Цей приклад демонструє, як forEach() може бути використаний для додавання складної функціональності до кожного вузла DOM.
HTML
<div id="task-list">Демонстраційний елемент</div>
JS
// Отримуємо список завдань
const taskList = document.querySelector('#task-list');
// Функція для відзначення завдання як виконаного
function markTaskAsCompleted(task) {
task.classList.toggle('completed');
}
// Функція для видалення завдання зі списку
function deleteTask(task) {
taskList.removeChild(task);
}
// Додаємо обробники подій до кожного завдання в списку
taskList.querySelectorAll('li').forEach(function(task) {
// Додаємо обробник події натискання для відзначення завдання як виконаного
task.querySelector('.mark-completed').addEventListener('click', function() {
markTaskAsCompleted(task);
});
// Додаємо обробник події натискання для видалення завдання
task.querySelector('.delete').addEventListener('click', function() {
deleteTask(task);
});
});
Коментарі
Коментарів ще немає — будьте першим!