Фон:
При работе со списком узлов я столкнулся с очень странным явлением. Я хотел использовать getElementsByClassName или что-то подобное, а затем отсортировать его. Я решил, что одним из способов было бы перебрать список узлов и поместить каждый элемент в массив и отсортировать массив. (Кстати, это сработало, но не так, как ожидалось). Я попытался использовать for (var i in nodeList)
для итерации, но он продолжал генерировать исключение для последних нескольких элементов, которые не были определены. странно то, что я мог бы вместо этого использовать for (var i = 0; i < nodeList.length; i++)
для итерации. Я просто протестировал его снова и на странице stackoverflow я запустил в своей консоли следующий код:
for (var i in document.getElementsByTagName("span"))
console.count("items");
console.log(document.getElementsByTagName("span").length);
Было отсчитано до items: 382
, но длина дала 380
. Как и ожидалось, когда я ввел document.getElementsByTagName("span")[380]
и document.getElementsByTagName("span")[381]
, они вернулись неопределенными. Это странное поведение не происходит с массивами (разрешено, списки узлов и массивы отличаются, но это доказывает, что это не разные циклы for, вызывающие проблему).
вопрос:
Почему конструкции for(var i in nodeList)
по-разному ведут себя в списках узлов, возвращая в конце пару неопределенных элементов?
for in
, а сfor
. - person Šime Vidas   schedule 17.09.2011[].slice.call( nodelist )
. - person Šime Vidas   schedule 17.09.2011for in
просто не работает для объектов? - person Joseph Marikle   schedule 17.09.2011