Доступ к элементам HTML-документа: обзор методов и примеры
Получение элементов DOM в JavaScript
В веб-разработке часто требуется обратиться к определённому элементу на странице. JavaScript предоставляет несколько способов получения ссылки на элемент или коллекцию элементов. Выбор метода зависит от того, что известно об элементе: его идентификатор, класс, тег или более сложное CSS-правило.
Как получить элемент DOM с помощью универсального метода querySelector?
Метод document.querySelector(selector) возвращает первый элемент, соответствующий переданному CSS-селектору. Это основной способ, так как он позволяет использовать любые селекторы, поддерживаемые CSS. Если элемент не найден, возвращается null.
// Получить элемент с id="header"
const header = document.querySelector('#header');
// Получить первый элемент с классом "menu"
const menu = document.querySelector('.menu');
// Получить первый элемент <div> внутри <article>
const articleDiv = document.querySelector('article div');Dom js (dom в javascript)
Пояснение: Строка селектора пишется точно так же, как в CSS. Метод удобен для единичного элемента. Для получения всех элементов используется querySelectorAll.
Когда использовать: Когда нужен один элемент и известен CSS-селектор (id, класс, атрибут, псевдокласс и т.д.). Это предпочтительный метод в современных проектах.
Как получить элемент по идентификатору (getElementById)?
Метод document.getElementById(id) возвращает элемент с указанным id. Это самый быстрый способ поиска по id, так как браузер хранит индекс id.
const logo = document.getElementById('logo');Javascript document (объект document в javascript)
Когда использовать: Когда точно известен id элемента и требуется максимальная производительность (например, в циклах или при обработке событий).
Как получить коллекцию элементов по имени класса (getElementsByClassName)?
Метод document.getElementsByClassName(name) возвращает живую коллекцию (HTMLCollection) всех элементов, имеющих заданный класс (или несколько классов, разделённых пробелами).
const items = document.getElementsByClassName('item');
// Коллекция живая: при добавлении нового элемента с классом "item" она автоматически обновится.
console.log(items.length); // количество элементов
Js кнопка (создание и обработка кнопок в javascript)
Когда использовать: Когда нужно получить все элементы с определённым классом, и требуется, чтобы коллекция автоматически обновлялась при изменениях DOM (живая коллекция).
Как получить коллекцию элементов по тегу (getElementsByTagName)?
Метод document.getElementsByTagName(tagName) возвращает живую HTMLCollection всех элементов с указанным именем тега.
const paragraphs = document.getElementsByTagName('p');
const firstPara = paragraphs[0];Javascript nodes (javascript nodes (узлы))
Когда использовать: Когда нужно обработать все элементы определённого типа (например, все ссылки <a> или все параграфы).
Как получить все элементы по CSS-селектору (querySelectorAll)?
Метод document.querySelectorAll(selector) возвращает статическую NodeList всех элементов, соответствующих селектору. В отличие от живых коллекций, NodeList не обновляется при изменении DOM.
// Все элементы с классом "highlight"
const highlights = document.querySelectorAll('.highlight');
// Все ссылки внутри навигации
const navLinks = document.querySelectorAll('nav a');Javascript следующий (javascript: получение следующего элемента)
Когда использовать: Когда нужен снимок множества элементов на момент вызова, и не требуется автоматическое обновление. Подходит для сложных селекторов.
Как получить формы или изображения через встроенные коллекции?
В документе существуют специальные коллекции, такие как document.forms, document.images, document.links, document.scripts. Они возвращают живую HTMLCollection соответствующих элементов.
const allForms = document.forms; // все формы
const firstForm = document.forms[0]; // первая форма
const allImages = document.images; // все изображенияJavascript element (javascript: получение элемента dom)
Когда использовать: Когда требуется быстро получить все формы, изображения или ссылки на странице без написания селектора. Удобно для итерации.
Как найти ближайшего родителя по селектору (closest)?
Метод element.closest(selector) ищет ближайший родительский элемент (включая сам элемент), который соответствует CSS-селектору. Возвращает первый подходящий элемент или null, если такого нет.
const btn = document.querySelector('.btn');
const form = btn.closest('form'); // найти родительскую формуКогда использовать: В обработчиках событий для поиска контейнера, в котором находится целевой элемент (например, найти строку таблицы по кликнутой ячейке).
Расширенные примеры получения DOM-элементов
Пример 1. Использование псевдоклассов в querySelector
Псевдоклассы позволяют выбирать элементы по их состоянию. Например, :not, :nth-child, :first-of-type.
// Получить первый элемент среди всех, не имеющих класс "hidden"
const firstVisible = document.querySelector(':not(.hidden)');
// Получить второй <li> в списке
const secondItem = document.querySelector('ul li:nth-child(2)');
// Получить последний <p> внутри <div>
const lastParagraph = document.querySelector('div p:last-of-type');// Результат: первый элемент, не скрытый, второй пункт списка, последний параграф (если существуют)
Пример 2. Поиск внутри конкретного элемента
Методы querySelector и querySelectorAll можно вызывать не только на document, но и на любом элементе. Это ограничивает область поиска.
const container = document.getElementById('container');
const innerSpan = container.querySelector('span'); // только внутри контейнера
const allButtons = container.querySelectorAll('.btn'); // все кнопки внутри контейнера// Если в контейнере нет span - null; если есть кнопки - NodeList
Пример 3. Атрибутные селекторы
Можно искать элементы по значениям атрибутов: [data-*], [href^="https"], [type="submit"].
// Все элементы с data-атрибутом
const dataElements = document.querySelectorAll('[data-*]');
// Ссылки, начинающиеся с https
const secureLinks = document.querySelectorAll('a[href^="https"]');
// Кнопки типа submit
const submitButtons = document.querySelectorAll('input[type="submit"]');// Возвращаются NodeList соответствующих элементов
Пример 4. Несколько классов и комбинации
Можно комбинировать классы, идентификаторы и теги: .class1.class2, div#id, ul > li.active
// Элемент с двумя классами
const doubleClass = document.querySelector('.item.active');
// Прямой потомок
const directChild = document.querySelector('ul > li');
// Соседний элемент
const adjacent = document.querySelector('h2 + p'); // параграф сразу после h2// В результате - первый подходящий элемент или null
Пример 5. Работа с живыми коллекциями и преобразование в массив
Живые коллекции (HTMLCollection) не имеют методов массива. Чтобы использовать map, filter и reduce, их преобразуют в массив.
const divs = document.getElementsByTagName('div');
const divArray = Array.from(divs);
// или const divArray = [...divs];
const texts = divArray.map(div => div.textContent);// texts - массив текстового содержимого всех div
Пример 6. Получение элементов в Shadow DOM
Если веб-компонент использует Shadow DOM, элементы внутри shadowRoot не видны из document.querySelector. Доступ к ним осуществляется через свойство shadowRoot.
const host = document.querySelector('my-component');
const shadow = host.shadowRoot;
const shadowButton = shadow.querySelector('.inner-button');// shadowButton - элемент внутри Shadow DOM
Пример 7. Фильтрация с помощью matches()
Метод element.matches(selector) проверяет, соответствует ли элемент CSS-селектору. Его можно использовать для фильтрации коллекции.
const allItems = document.querySelectorAll('li');
// Оставить только те, у которых есть класс "active"
const activeItems = Array.from(allItems).filter(item => item.matches('.active'));// activeItems - массив элементов с классом active
Пример 8. Комбинированный поиск с использованием closest
В обработчиках событий часто требуется найти ближайшего родителя с определённым классом.
document.addEventListener('click', function(e) {
const row = e.target.closest('.data-row');
if (row) {
console.log('Кликнут ряд:', row);
}
});// Если клик произошёл внутри .data-row, будет выведен этот элемент; иначе ничего.