Sedbol
@Sedbol

В чем отличие document.querySelectorAll() от document.getElementsByClassName()?

Почему такое отличие? Почему по такому методу удаляются не все элементы?
var uid_del_m =  document.getElementsByClassName('user');
for (let i=0;uid_del_m.length>i;i++){
uid_del_m[i].parentNode.removeChild(uid_del_m[i]);
}

А с querySelector все срабатывает нормально
var uid_del_m =  document.document.querySelectorAll('.user');
for (let i=0;uid_del_m.length>i;i++){
uid_del_m[i].parentNode.removeChild(uid_del_m[i]);
}

Если выводить в консоль то коллекции не чем не отличаются. Почему так происходит?
  • Вопрос задан
  • 905 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Если выводить в консоль то коллекции не чем не отличаются.

Это не так. В первом случае HTMLCollection, во втором NodeList. Отличие первой от второго состоит в том, что

HTMLCollection, хранящая элементы DOM, является динамической. При изменении документа она моментально отражает все произведённые изменения.

То есть, обходите коллекцию, и одновременно модифицируете её. Удалили нулевой элемент - на его место встал первый, а индексу сделали ++. На следующей итерации удалять будете первый, и новый нулевой / бывший первый уже никуда не денется. Как и остальные элементы, изначально имевшие нечётные индексы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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