@RuslanTimuziyev
Немного кодер

Почему работа for и forEach отличается?

Объясните, почему forEach работает, а for нет. Это аккордеон. Вот работающий вариант с forEach:

(function accordeon() {
    var el = document.querySelectorAll('.faq-accordeon-item__question');
    for(var i = 0; i < el.length; i++) {
        el[i].addEventListener('click', function(e) {
            var show = document.querySelectorAll('.faq-accordeon-item__info');

            show.forEach(function(item) {
                item.style.display = 'none';
                console.log(32);
            });

            e.target.nextElementSibling.style.display = 'block';
        });
    }
})();

А вот неработающий с for:
(function accordeon() {
    var el = document.querySelectorAll('.faq-accordeon-item__question');
    for(var i = 0; i < el.length; i++) {
        el[i].addEventListener('click', function(e) {
            var show = document.querySelectorAll('.faq-accordeon-item__info');

            for(var i = 0; i < show.lenght; i++) {
                show[i].style.display = 'none';
                console.log(32);
            }

            e.target.nextElementSibling.style.display = 'block';
        });
    }
})();

Я, конечно, могу оставить forEach, но все же интересно, в чем разница между ними в данном контексте.
  • Вопрос задан
  • 319 просмотров
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
show.lenght — опечатка тут (вместо length).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dom1n1k
@dom1n1k
Использовать надо for.
Метод querySelectorAll возвращает не массив, а объект типа NodeList, в который метод forEach был добавлен совсем недавно.
https://developer.mozilla.org/en-US/docs/Web/API/N...
То есть работать это будет только в самых свежих браузерах (наверняка тестируете в последнем Хроме).
Ну либо надо полифил добавлять.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы