getElementsByClassName() в JavaScript
Поиск по классу
Метод document.getElementsByClassName() находит все элементы с указанным классом. Результат - коллекция HTMLCollection. Если совпадений нет, она будет пустой, а не равной null.
<article class="card">Первая карточка</article>
<article class="card">Вторая карточка</article>
const cards = document.getElementsByClassName('card');
console.log(cards.length); // 2
В аргумент передают имя класса без точки. Несколько классов указывают через пробел: getElementsByClassName(‘card featured’) найдёт элементы с обоими классами.
Перебор элементов
HTMLCollection не является массивом, поэтому у неё нет метода forEach(). Для обхода используйте обычный цикл for.
for (let index = 0; index < cards.length; index++) {
cards[index].classList.add('card--selected');
}
Класс card—selected будет добавлен каждой найденной карточке.
Живая коллекция
Коллекция HTMLCollection живая: если на странице добавится подходящий элемент или у существующего изменится искомый класс, результат обновится без повторного вызова метода.
Не удаляйте элементы из такой коллекции и не снимайте с них искомый класс прямо во время обхода - часть элементов можно пропустить. Если нужен фиксированный список, создайте копию через Array.from(cards).
getElementsByClassName() или querySelectorAll()
document.getElementsByClassName('card featured'); // живая HTMLCollection
document.querySelectorAll('.card.featured'); // статический NodeList
getElementsByClassName() принимает только имена классов. querySelectorAll() принимает любой CSS-селектор и удобен, когда нужен фиксированный набор элементов.
Итого
document.getElementsByClassName() находит все элементы по классу и возвращает живую HTMLCollection. Имя класса передают без точки. Для более гибкого поиска и статического результата используйте querySelectorAll().