Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с getElementsByClassName (https://javascript.ru/forum/misc/46242-problema-s-getelementsbyclassname.html)

a798129 02.04.2014 22:38

Проблема с getElementsByClassName
 
Здравствуйте!
Нужно найти все элементы на странице, у которых есть класс "cssClass"
и удалить у них этот класс.
По аналогии с getElementsByTagName, должно работать так:
var items = document.getElementsByClassName('cssClass');
for(var i=0; i< items.length; i++){
    items[i].classList.remove('cssClass');
}

Однако, похоже на то, что после каждой итерации заново вычисляется переменная items, и соответственно, вызывается getElementsByClassName.
Т.е. вот этот код решает поставленную задачу:
var items = document.getElementsByClassName('cssClass');
var len = items.length;
for(var i=0; i< len; i++){
    items[0].classList.remove('cssClass');
}

Но хотелось бы узнать почему так. Объясните пожалуйста почему первый вариант не работает?

рони 02.04.2014 22:44

a798129,
удаляйте с последнего либо кешируйте в массив предварительно - или как у вас удалять пока есть нулевой. потому что выборка "живая" отслеживает все изменения в DOM

a798129 02.04.2014 22:55

Понятно, спасибо. Действительно оказалось что все getElementsBy возвращают живые выборки. (Я просто в getElementsById не изменял количество nodes) Всем большое спасибо :)

danik.js 02.04.2014 23:19

Цитата:

Сообщение от a798129
getElementsByClassName

Не поддерживается в IE8 кстати. Можешь убить двух зайцев, заменив на querySelectorAll('.class')


Часовой пояс GMT +3, время: 14:18.