Не работает анализ javascript document.getElementsByClassName

У меня есть этот код в исходном коде страницы:

<a data-toggle="dropdown" class="user" href="#">Tom</a>

Я попытался проанализировать строку "Том" с этим кодом:

var username = document.getElementsByClassName("user").innerHTML;
alert(username);

Но переменная username была неопределена, в чем проблема с кодом? Я не хочу использовать JQuery.

3 ответа

Посмотрите на имя метода DOM: getElement * s * ByClassName. Это множественное число, поэтому может и, скорее всего, вернет более 1 элемента.
Эти элементы будут храниться в массиве как объект (экземпляр NodeList).

var usernames = document.getElementsByClassName('user');
var first = usernames[0];

Но действительно, getElementsByClassName не так хорошо поддерживается, было бы предпочтительнее использовать querySelectorAll (сравните querySelector поддержка поддержка с этим из getElementsByClassName особенно в IE)

var usernames = document.querySelectorAll('.user');
var first = usernames[0];

Кроме того, используя эти селекторы, вы можете обойтись без запроса всего DOM:

var username = document.querySelector('.user');//gets just one

Замечания:
Подробности на NodeList класс по MDN здесь
Обратите внимание, что некоторые версии Firefox будут возвращать объект, который не называется NodeList, но собственный расширенный набор DOM API в Mozilla, который расширяет NodeList конструктор. Я не могу вспомнить, что этот объект называется банкоматом, но я вспомню, как только вспомню

Вы просто пропустили [0], чтобы получить первый элемент.

var username = document.getElementsByClassName("user")[0].innerHTML;

В отличие от document.getElementById, document.getElementsByClassName Метод возвращает массив элементов, которые имеют указанный класс. В этом случае вы можете выбрать первый из них.

var username = document.getElementsByClassName("user")[0].innerHTML;
alert(username);

Вы пропустили [0],

Другие вопросы по тегам