Nikolino
@Nikolino

Почему не все элементы удаляются?

Хочу удалить все div с классом test

Делаю через цикл for.

Если в цикле пишем i++, то удаляются не все элементы, если i+1, то все.

Почему так?

https://jsfiddle.net/nikolino/u9o1a2fj/
  • Вопрос задан
  • 83 просмотра
Решения вопроса 2
Fragster
@Fragster
помогло? отметь решением!
Стандартная ошибка обхода массива с одновременной модификацией.
Используйте другой подход:

С конца:
var divs = document.getElementsByClassName('test');
    var i;
    for (i = divs.length-1; i >=0; i--) {
      divs[i].remove();
    }

или в цикле while
var divs = document.getElementsByClassName('test');
    while (divs.length) {
      divs[0].remove();
    }
Ответ написан
Комментировать
Stalker_RED
@Stalker_RED
getElementsByClassName возвращет HTMLCollection.
HTMLCollection, хранящая элементы DOM, является динамической. При изменении документа она моментально отражает все произведённые изменения.

Вы удаляете первый элемент, и тот что был вторым становится первым. А ваш цикл "думает" что вы его уже удалили.

Можно пройтись по этой коллекции в обратном порядке
for(i = divs.length - 1; i >= 0; i--)
Или можно преобразовать коллекцию в массив
divs = Array.from(divs)
Или вообще не использовать for
while(divs[0])
  divs[0].remove()
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы