Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Обход NodeList (https://javascript.ru/forum/misc/44441-obkhod-nodelist.html)

rekzi 19.01.2014 23:22

Обход NodeList
 
var listEl = document.getElementsByClassName("selectLabel"), i, 
    rgxp = /\s{1}selectLabel/;

console.log(listEl.length);

for (i = 0; i < listEl.length; i++){
    console.log(i+" "+listEl[i].className);
    listEl[i].className = listEl[i].className.replace(rgxp, "");
    console.log(i+" "+listEl[i].className);
}


listEl.length меняет динамически значение. Как поступить? Отказаться от getElementsByClassName?

рони 19.01.2014 23:35

rekzi,
либо обходить NodeList с конца либо сделать настоящий массив из NodeList либо перезаписывать всегда только нулевой пока он есть

danik.js 20.01.2014 04:56

Цитата:

Сообщение от rekzi
Отказаться от getElementsByClassName?

Хороший вариант, тем более что этот метод не поддерживается в IE8, в отличие от document.querySelectorAll('.class')

Но если все же понадится приведение к массиву, то:
var nodeList = document.getElementsByTagName('div');
var array = Array.apply(null, nodeList);
// или array = Array.prototype.slice.call(nodeList)


Еще рекомендую использовать element.classList.(add|remove|contains|toggle), с костылем для старых браузеров (легко гуглится classList polyfill)


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