Что такое DOM и выбор элементов
DOM в JavaScript: что такое Document Object Model, как устроено дерево элементов и как выбирать элементы через querySelector, getElementById и другие методы.
DOM (Document Object Model) — программный интерфейс, через который JavaScript видит и изменяет HTML-страницу. Каждый тег становится объектом (узлом) в дереве; браузер строит это дерево при загрузке страницы.
Структура дерева DOM
Корень дерева — объект document. Вся страница доступна через него.
// document — входная точка
console.log(document.title); // заголовок страницы
console.log(document.body); // элемент <body>
console.log(document.URL); // URL текущей страницы
querySelector и querySelectorAll
Самые универсальные методы — принимают любой CSS-селектор.
// один элемент (первый, который найдёт)
const title = document.querySelector('h1');
const btn = document.querySelector('.btn-primary');
const input = document.querySelector('#email');
// все подходящие элементы — возвращает NodeList
const items = document.querySelectorAll('li');
console.log(items.length); // количество <li> на странице
// перебор через forEach
items.forEach(item => {
console.log(item.textContent);
});
getElementById и getElementsByClassName
Классические методы — немного быстрее, но менее гибкие.
// по id — возвращает один элемент или null
const header = document.getElementById('main-header');
// по классу — возвращает HTMLCollection (живая коллекция)
const cards = document.getElementsByClassName('card');
console.log(cards.length);
// по тегу
const paragraphs = document.getElementsByTagName('p');
console.log(paragraphs.length);
Навигация по дереву
От найденного элемента можно перемещаться по дереву к родителям, детям и соседям.
const list = document.querySelector('ul');
console.log(list.parentElement); // родитель
console.log(list.children); // дочерние элементы (HTMLCollection)
console.log(list.firstElementChild); // первый дочерний
console.log(list.lastElementChild); // последний дочерний
console.log(list.nextElementSibling); // следующий сосед
Проверка наличия элемента
querySelector вернёт null, если элемент не найден. Всегда проверяйте это перед обращением к свойствам.
const modal = document.querySelector('.modal');
if (modal) {
console.log('Модалка найдена');
} else {
console.log('Модалки нет на странице');
}
// или через опциональную цепочку
const text = document.querySelector('.hero')?.textContent;
console.log(text); // undefined, если .hero не существует
Коротко
- DOM — дерево узлов, корень — объект
document. querySelector(selector)— один элемент по CSS-селектору (илиnull).querySelectorAll(selector)— NodeList всех подходящих элементов.- Перед обращением к методам найденного элемента всегда проверяйте, что он не
null.
Проверьте себя
1. Что возвращает querySelector, если элемент не найден?
Aundefined
B[]
Cnull
Dfalse
2. querySelectorAll возвращает...
Aмассив Array
BNodeList
CHTMLCollection
Dодин элемент
3. Через что доступен корень всего дерева DOM?
Awindow.dom
Bdocument
Croot
Dhtml