Почему JavaScript getElementsByClassName предоставляет объект, который НЕ является массивом?

Я пытаюсь получить список в JavaScript (без использования jQuery )всех элементов на странице с определенным именем класса. Поэтому я использую функцию getElementsByClassName ()следующим образом:

var expand_buttons = document.getElementsByClassName('expand');
console.log(expand_buttons, expand_buttons.length, expand_buttons[0]);

Обратите внимание, что на моей странице есть три элемента привязки с классом «расширить». Этот console.log ()выводит

[] 0 undefined

Далее, для прикола, я поместил кнопки расширения _в свой собственный массив следующим образом:

var newArray = new Array(expand_buttons);
console.log(newArray, newArray.length);

Это внезапно выводит

[NodeList[3]] 1

и я могу щелкнуть список узлов и увидеть атрибуты трех элементов привязки «расширить» на странице. Также стоит отметить, что мне удалось заставить мой код работать на тестовой странице w3schools .

Также можно отметить, что мое использование document.getElementsByName фактически выводит (на консоль )массив элементов, но когда я запрашиваю его длину, он сообщает мне 0. Точно так же, если я пытаюсь получить доступ элемент массива, использующий array_name[0]как обычно, выводит «undefined», несмотря на то, что при выводе объекта на консоль явно присутствует элемент внутри массива.

Кто-нибудь знает, почему это может быть? Я просто хочу перебирать элементы DOM, и в данный момент я избегаю jQuery, потому что пытаюсь практиковать кодирование с помощью ванильного JavaScript.

Спасибо,

ПарагонРГ

6
задан Paragon 16 June 2012 в 15:05
поделиться