На данный вопрос уже ответили:
Собственно сам вопрос: почему когда пишу код по getElementById
работает, а с getElementsByclassName
не работает ??
Это рабочий код
var img = document.getElementById('images');
var imagesArray = ["img/flower1.jpg", "img/flower2.jpg", "img/flower3.jpg",
"img/flower5.jpg", "img/flower6.jpg"];
var index = 0;
function changeimg(){
img.setAttribute("src" ,imagesArray[index]);
imdex++;
if (imdex >= imagesArray.length) {
imdex = 0;
}
}
setInterval(changeimg, 5000);
Это не рабочий код
var img = document.getElementsByClassName('images');
var imagesArray = ["img/flower1.jpg", "img/flower2.jpg", "img/flower3.jpg",
"img/flower5.jpg", "img/flower6.jpg"];
var index = 0;
function changeimg(){
img.setAttribute("src" ,imagesArray[index]);
imdex++;
if (imdex >= imagesArray.length) {
imdex = 0;
}
}
setInterval(changeimg, 5000);
getElementsById
- это один элемент, а getElementsByClassName
- это живая коллекция элементов. Вообще где указано getElements
- это живая коллекция с элементами.
И что бы обратиться к элементу по getElementsByClassName
нужно указывать индекс элемента, к которому ты хочешь обратиться. А если ты хочешь ко всем элементом с данным классом, то нужно создавать цикл:
Пример:
var elem = document.getElementsByClassName('class');
for(var i = 0; i < elem.length; i++){
elem[i].innerHTML = 'Код'
};
Так же можно обращаться через новые функции: querySelector
и querySelectorAll
document.querySelector('query selector')
- это первый элемент с данным селектором.
document.querySelectorAll('query selector')
- все элементы с данным селектором (коллекция элементов. Нужно обращаться через индекс).
Чем примечательная эта функция, так это тем, что в ней можно указывать те же селекторы, что и в CSS. То есть, можно обратиться к элементам по атрибуту - [атрибут="его значение"]
, по классу .element
, по ID - #elem
и по всем другим query селекторам.
getElementById
getElementsByClassName
^
Второй возвращает коллекцию элементов, а не 1 элемент, как первый.
Потому не работает, что getElementById
возвращает один элемент, а getElementsByClassName
возвращает массив элементов.
Чтобы получить первый элемент попробуйте написать так:
var img = document.getElementsByClassName('images')[0];
Литература:
MDN: document.getElementsByClassName()
MDN: document.getElementById()
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть массив строк произвольной длины, например ["12", "31", "3", "12"], назовём его tempКак можно его превратить в подобное представление:
Ребят, решил помочь другуТеперь сам маюсь с этим и не знаю, в чем проблема
У меня есть html код, где есть аудио в js, и мне бы хотелось реализовать случайный следующий трек и что бы 1 и тот же трек для раза подряд не выпадал,...
Есть блок с текстом и скрипт, который сохраняет текст в буфер обмена при нажатие на кнопкуКак убрать (скрыть) блок с текстом со страницы, но оставить...