#javascript #loops #addeventlistener #arrayiterator
#javascript #циклы #addeventlistener #arrayiterator
Вопрос:
Я пытаюсь понять, возможно ли использовать итератор массива (например .forEach()) для выполнения той же функциональности, что и цикл for.
Я пытаюсь понять прослушиватели событий javascript и написал некоторый базовый код, который поможет мне научиться
У меня есть несколько div с именем класса ‘button’.
У меня есть функциональность, которой я хочу достичь, работая с циклом for, но я не смог придумать, как сделать то же самое с итератором. Возможно ли это??
// Can I use an Array Iterator to do the same operation here
for (var i = 0; i < button.length; i ) {
addEvent(button[i]);
}
Смотрите JSFiddle всего моего кода здесь
Я пытался использовать .Итератор forEach (), но не смог понять, как захватить индекс массива в итераторе forEach (), поскольку мне нужно определить, на какой кнопке запускать функцию addEvent.
Ответ №1:
button
в коде, на который вы разместили только ссылку, это HTMLCollection, поэтому с ним «изначально» мало что можно сделать
Однако, используя Array.из вы можете «преобразовать» его в массив, а затем использовать метод Array#forEach — таким образом, ваш код будет
Array.from(button).forEach(function(btn) {
addEvent(btn);
});
или, еще лучше
Array.from(button).forEach(addEvent);
Если вы имеете дело с Internet Exploder, вам понадобится полизаполнение для Array.from
Если вам нужно разобраться с Internet Exploder до версии 9, вам понадобится полизаполнение для Array.prototype.forEach
Документация MDN, на которую я ссылался, содержит полизаполнения для обоих
Комментарии:
1. Спасибо за помощь Jaromanda X. Моя ошибка, я прочитал Array, когда в документе указано Array-like. Я не понимал, что это HTML-коллекция. > Метод getElementsByClassName интерфейса Document возвращает >** массивоподобный ** объект всех дочерних элементов, которые имеют все заданные имена классов.
2. да, это ловушка: p