Управление элементами DOM
Free PreviewМы умеем находить элементы на странице. Теперь разберёмся, что с ними можно делать.
Текстовое содержимое
Самое частое действие — прочитать или изменить текст внутри элемента. Для этого есть два свойства.
textContent — текстовое содержимое элемента без HTML-тегов. Это безопасный способ установить текст:
const title = document.querySelector('h1'); console.log(title.textContent); // 'Санкт-Петербург' title.textContent = 'Северная столица'; // изменить текстjs
innerHTML — содержимое элемента вместе с HTML-разметкой. Позволяет читать и устанавливать HTML как строку:
const card = document.querySelector('.card'); console.log(card.innerHTML); // '<h3>Эрмитаж</h3><p>Один из крупнейших музеев мира.</p>' card.innerHTML = '<h3>Петергоф</h3><p>Дворцово-парковый ансамбль.</p>';js
Будьте осторожны с innerHTML: если вставляете данные, полученные от пользователя, никогда не вставляйте их напрямую через innerHTML — это открывает уязвимость XSS. Для пользовательских данных всегда используйте textContent.
Стили
Через свойство style можно читать и задавать CSS-стили напрямую. CSS-свойства записываются в camelCase:
const hero = document.querySelector('.hero'); hero.style.backgroundColor = '#1a1a2e'; hero.style.color = '#ffffff'; hero.style.padding = '40px';js
Такой подход удобен для динамических вычислений — например, когда нужно задать ширину, которую мы узнаём только в момент выполнения. Но для большинства задач лучше управлять внешним видом через классы, а не через style напрямую — это чище и придерживается разделения ответственности: HTML/CSS отвечают за внешний вид, JS — за логику.
Классы
Самый правильный подход — добавлять и убирать CSS-классы. Для этого у каждого элемента есть свойство classList с набором удобных методов:
const card = document.querySelector('.card'); card.classList.add('featured'); // добавить класс card.classList.remove('featured'); // убрать класс card.classList.toggle('active'); // добавить если нет, убрать если есть card.classList.contains('featured'); // проверить наличие → true / false card.classList.replace('old', 'new'); // заменить один класс другимjs
Метод toggle особенно удобен для переключения состояний — например, открытия/закрытия меню:
const burger = document.querySelector('.burger'); const nav = document.querySelector('nav'); // при клике переключаем класс — стили пишем в CSS burger.addEventListener('click', () => { nav.classList.toggle('open'); });js
Обработчики событий (addEventListener) — это тема следующего урока, сейчас просто обратите внимание на подход.
Атрибуты
Для работы с HTML-атрибутами (src, href, alt, data-* и другими) используется пара методов:
const link = document.querySelector('a'); link.getAttribute('href'); // получить значение атрибута link.setAttribute('href', 'https://hermitage.ru'); // установить link.removeAttribute('target'); // удалить атрибут link.hasAttribute('target'); // проверить наличие → true / falsejs
Стандартные атрибуты (id, href, src, alt) доступны и как прямые свойства элемента:
const img = document.querySelector('img'); console.log(img.src); // то же что getAttribute('src') img.alt = 'Эрмитаж'; // то же что setAttribute('alt', 'Эрмитаж')js
Создание и добавление элементов
Чтобы добавить новый элемент на страницу, нужно его создать через document.createElement, заполнить и вставить в DOM:
// создаём элемент const newCard = document.createElement('div'); newCard.classList.add('card'); newCard.innerHTML = '<h3>Невский проспект</h3><p>Главная улица города.</p>'; // находим контейнер и добавляем карточку в конец const grid = document.querySelector('.attractions .grid'); grid.append(newCard);js
Несколько методов для вставки:
parent.append(element); // добавить в конец parent.prepend(element); // добавить в начало element.remove(); // удалить элемент из DOM parent.replaceChild(newEl, oldEl); // заменить один элемент другимjs
Размеры и положение элемента
Иногда нужно узнать размер элемента или его координаты на странице. Метод getBoundingClientRect() возвращает объект с нужными данными:
const hero = document.querySelector('.hero'); const rect = hero.getBoundingClientRect(); console.log(rect.width); // ширина console.log(rect.height); // высота console.log(rect.top); // расстояние от верха области просмотра console.log(rect.left); // расстояние от левого краяjs
Это бывает полезно для анимаций, позиционирования всплывающих элементов и других задач, где нужно знать расположение элемента в данный момент.
Практика
Попробуйте прямо в консоли браузера на любой странице:
// найти заголовок и изменить его document.querySelector('h1').textContent = 'Изменено из консоли!'; // добавить класс к элементу document.querySelector('body').classList.add('dark'); // создать и добавить параграф const p = document.createElement('p'); p.textContent = 'Добавлено через JavaScript'; document.body.append(p);js
Консоль браузера — отличная площадка для экспериментов с DOM без создания отдельных файлов.
В следующем уроке научимся реагировать на действия пользователя — познакомимся с событиями браузера.