Манипуляции с HTML-документом через JavaScript – фундамент современного веба. Без перезагрузки страницы можно изменить содержимое, структуру и поведение элементов. Это достигается через объектную модель документа (DOM), которую JavaScript использует для доступа к каждому узлу HTML-дерева.
Для изменения содержимого элемента применяется innerHTML, textContent или innerText. Например, document.getElementById(‘title’).innerHTML = ‘Новый заголовок’ мгновенно заменяет HTML внутри элемента. Следует учитывать, что innerHTML парсит строку как HTML, а textContent воспринимает её как обычный текст – это важно для предотвращения XSS-уязвимостей.
Изменение атрибутов происходит через методы setAttribute, getAttribute и removeAttribute. Также доступны сокращения вроде element.href = ‘…’ или element.className = ‘new-class’. Для работы с классами предпочтительнее использовать classList: методы add(), remove(), toggle() и contains() дают точный контроль без перезаписи других классов.
Создание, клонирование и удаление элементов выполняется через createElement, cloneNode и remove. Например, document.createElement(‘div’) создаёт новый элемент, который можно вставить в DOM с помощью appendChild или insertBefore. Чтобы полностью удалить элемент, достаточно вызвать element.remove().
JavaScript также позволяет динамически реагировать на действия пользователя. Обработчики событий (например, addEventListener(‘click’, …)) дают возможность менять HTML по клику, наведению или вводу данных. Это открывает путь к созданию интерактивных интерфейсов без серверной перезагрузки.
Как заменить текст внутри элемента по идентификатору
Чтобы изменить текст внутри HTML-элемента с определённым идентификатором, используется метод getElementById
для получения ссылки на элемент и свойство textContent
для замены текста. Этот способ не влияет на вложенные теги и безопасен для использования с любым типом содержимого.
Пример: допустим, в документе есть элемент <div id="info">Старый текст</div>
. Чтобы заменить его содержимое на «Новый текст», выполните следующий JavaScript-код:
document.getElementById("info").textContent = "Новый текст";
Если элемент отсутствует, попытка обращения по идентификатору вернёт null
. Чтобы избежать ошибок, рекомендуется проверять существование элемента перед изменением текста:
const element = document.getElementById("info");
if (element) {
element.textContent = "Новый текст";
}
При необходимости сохранить HTML-разметку внутри элемента используйте innerHTML
вместо textContent
, но с учётом риска XSS-уязвимостей при работе с внешними данными.
Как изменить атрибут ссылки или изображения
Для изменения атрибута ссылки (например, href
) или изображения (например, src
) с помощью JavaScript, необходимо сначала получить элемент через DOM. Используйте document.querySelector
или getElementById
для точного выбора.
Пример изменения ссылки:
const link = document.querySelector('a#myLink');
link.href = 'https://example.com/new-page';
link.target = '_blank';
Пример изменения изображения:
const image = document.getElementById('banner');
image.src = 'images/new-banner.jpg';
image.alt = 'Новый баннер';
Если требуется изменить атрибут только при определённом действии, например, при клике:
document.querySelector('#changeBtn').addEventListener('click', () => {
document.querySelector('img#preview').src = 'images/updated.jpg';
});
Список часто изменяемых атрибутов:
Элемент | Атрибут | Назначение |
---|---|---|
<a> | href | URL назначения ссылки |
<a> | target | Способ открытия ссылки |
<img> | src | Источник изображения |
<img> | alt | Альтернативный текст |
Изменение атрибутов через setAttribute
позволяет работать с любыми нестандартными атрибутами:
const link = document.querySelector('a');
link.setAttribute('data-status', 'updated');
Как добавить новый HTML-элемент в конец блока
Для добавления элемента в конец конкретного блока используйте метод appendChild()
или insertAdjacentHTML()
. Первый способ подходит при создании элемента через document.createElement()
. Второй – при вставке HTML-строки напрямую.
Пример с appendChild()
:
const container = document.getElementById('content');
const newElement = document.createElement('div');
newElement.textContent = 'Новый элемент';
container.appendChild(newElement);
Если нужно вставить HTML как строку:
const container = document.getElementById('content');
container.insertAdjacentHTML('beforeend', '<div>Новый элемент</div>');
Метод insertAdjacentHTML()
не вызывает повторный парсинг всего содержимого, что увеличивает производительность при частых вставках.
Убедитесь, что элемент, в который вставляется содержимое, уже загружен. Иначе получите null
при вызове getElementById()
. Гарантировать это можно, обернув код в DOMContentLoaded
:
document.addEventListener('DOMContentLoaded', () => {
// вставка здесь
});
Как удалить элемент со страницы по классу
Для удаления элемента по классу применяется метод document.querySelectorAll
в связке с forEach
и remove
. Это позволяет удалить все соответствующие элементы, а не только первый найденный.
- Получите список всех элементов с нужным классом:
const элементы = document.querySelectorAll('.удалить');
- Удалите каждый элемент из DOM:
элементы.forEach(элемент => элемент.remove());
Если необходимо удалить только один (первый) элемент с классом, используйте:
const элемент = document.querySelector('.удалить');
if (элемент) {
элемент.remove();
}
Рекомендуется проверять наличие элемента перед удалением, чтобы избежать ошибок в случае его отсутствия.
Удаление может быть вызвано событием. Пример: удаление при клике по кнопке:
document.querySelector('.кнопка').addEventListener('click', () => {
document.querySelectorAll('.удалить').forEach(el => el.remove());
});
- Класс должен быть указан без пробелов и без точки в методе
classList.contains
. - Метод
remove
не поддерживается в IE до версии 11. - Если элементов много, используйте
while
иparentNode.removeChild
для повышения производительности.
Как изменить стиль элемента через JavaScript
Для изменения стиля элемента в JavaScript используется свойство style
объекта DOM. Оно позволяет напрямую задавать CSS-свойства через JavaScript-код.
Чтобы изменить стиль, сначала необходимо получить ссылку на элемент, например, с помощью document.getElementById
:
const элемент = document.getElementById("блок");
Далее можно задать любое доступное CSS-свойство, преобразованное в camelCase. Например, background-color
становится backgroundColor
:
элемент.style.backgroundColor = "#f0f0f0";
элемент.style.fontSize = "18px";
элемент.style.border = "1px solid #000";
Если необходимо снять ранее заданное значение, присвойте свойству пустую строку:
элемент.style.fontSize = "";
Для динамического управления стилями в зависимости от условий используйте конструкции if
или тернарный оператор:
элемент.style.display = элемент.classList.contains("скрыть") ? "none" : "block";
Избегайте массового изменения стилей в цикле – это снижает производительность. Вместо этого, применяйте CSS-классы с заранее определёнными стилями и переключайте их с помощью classList.add
, remove
и toggle
:
элемент.classList.add("активный");
элемент.classList.remove("неактивный");
элемент.classList.toggle("видимый");
Не используйте setAttribute("style", ...)
для установки нескольких стилей – это перезаписывает все ранее заданные значения и может привести к ошибкам.
Как реагировать на нажатие кнопки и менять содержимое
Для отслеживания нажатия кнопки используется метод addEventListener
с типом события "click"
. Элемент кнопки можно получить через document.getElementById
или querySelector
. После этого задаётся функция-обработчик, внутри которой происходит изменение содержимого других элементов страницы.
Пример: есть элемент <div id="output"></div>
и кнопка <button id="changeBtn">Изменить</button>
. Скрипт будет выглядеть так:
document.getElementById("changeBtn").addEventListener("click", function() {
document.getElementById("output").textContent = "Содержимое обновлено";
});
Свойство textContent
заменяет весь текст внутри целевого элемента. Если нужно вставить HTML, используется innerHTML
, но его не рекомендуется применять при работе с внешними данными из-за риска XSS-атак.
Если требуется сменить содержимое нескольких элементов, используйте querySelectorAll
и цикл forEach
. Например:
document.getElementById("changeBtn").addEventListener("click", function() {
document.querySelectorAll(".item").forEach(function(el) {
el.textContent = "Обновлено";
});
});
Также возможно менять свойства элементов, например style.display
, classList.toggle
или setAttribute
, прямо в обработчике события.
Вопрос-ответ:
Почему изменения, сделанные через JavaScript, не сохраняются после перезагрузки страницы?
JavaScript работает в браузере и вносит изменения только во временное представление страницы — так называемый DOM. После обновления браузер снова загружает HTML из исходного файла на сервере, игнорируя всё, что было добавлено или изменено с помощью скриптов. Чтобы сохранить изменения, нужно использовать хранилище, например `localStorage`, или передавать данные на сервер и записывать их в базу данных.