19-04-25 08:32:19
DOM представляет документ в виде иерархии узлов, где каждый HTML-тег, атрибут и текст становится отдельным объектом. Например, этот HTML:
<!DOCTYPE html>
<html>
<head>
<title>Пример</title>
</head>
<body>
<h1>Привет, мир!</h1>
</body>
</html>
Преобразуется в дерево:
Каждый узел имеет тип (например, Element, Text, Comment) и свойства (родитель, дети, атрибуты).
JavaScript предоставляет методы для выборки элементов:
1. По идентификатору:
const header = document.getElementById('header');
2. По классу (возвращает коллекцию):
const buttons = document.getElementsByClassName('btn');
3. По тегу:
const paragraphs = document.getElementsByTagName('p');
4. Современные методы:
// Первый совпадающий элемент
const element = document.querySelector('.container');
// Все элементы с классом 'item'
const items = document.querySelectorAll('.item');
Примеры:
<p id="demo">Изначальный текст</p>
<script>
const paragraph = document.querySelector('#demo');
// Изменение текста
paragraph.textContent = 'Новый текст!';
// Добавление HTML
paragraph.innerHTML = '<strong>Жирный текст</strong>';
</script>
const div = document.querySelector('div');
// Добавить класс
div.classList.add('active');
// Удалить класс
div.classList.remove('old-class');
// Переключить класс
div.classList.toggle('hidden');
// Создать элемент
const newButton = document.createElement('button');
newButton.textContent = 'Нажми меня';
// Добавить в конец body
document.body.appendChild(newButton);
JavaScript позволяет реагировать на действия пользователя:
<button id="myButton">Кликни</button>
<script>
const button = document.querySelector('#myButton');
button.addEventListener('click', () => {
alert('Кнопка нажата!');
button.style.backgroundColor = 'red';
});
</script>
Использование свойств узлов для перемещения:
const parent = element.parentNode; // Родитель
const firstChild = element.firstChild; // Первый потомок
const siblings = element.parentNode.children; // Все дети родителя
Минимизируйте перерисовки: Группируйте изменения с помощью DocumentFragment:
const fragment = document.createDocumentFragment();
for (let i = 0; i < 100; i++) {
const item = document.createElement('div');
item.textContent = `Элемент ${i}`;
fragment.appendChild(item);
}
document.body.appendChild(fragment);
Кэшируйте ссылки на элементы: Избегайте многократных запросов вроде document.querySelector в циклах.
Используйте делегирование событий: Обрабатывайте события на родительском элементе вместо множества дочерних.
DOM — это мост между статичным HTML и интерактивным JavaScript. Понимание его структуры и методов работы позволяет создавать динамические веб-приложения. Практикуйтесь с примерами, экспериментируйте с событиями и помните об оптимизации для повышения производительности.