Что такое DOM?

JuniorHTML #html #dom

Вопрос

Что такое DOM и как он связан с HTML?

Короткий ответ

DOM (Document Object Model) — это объектное представление HTML-документа в памяти браузера: дерево узлов (элементов, текста, атрибутов), с которым JavaScript может взаимодействовать — читать и изменять страницу.

Подробный ответ

Когда браузер загружает HTML, он парсит текст и строит из него дерево объектов — DOM. Это не сам HTML-файл, а его представление в памяти:

  • Каждый тег становится узлом-элементом (Element).
  • Текст внутри тегов — текстовым узлом (Text).
  • У узлов есть родители, дети и соседи — отсюда "дерево".

DOM — это API, предоставляемый браузером (часть Web API), а не часть языка JavaScript. Через него JS может:

  • находить элементы (document.querySelector, getElementById);
  • изменять содержимое и атрибуты (element.textContent, element.setAttribute);
  • создавать/удалять узлы (document.createElement, element.remove());
  • подписываться на события (element.addEventListener).

Важно отличать DOM от HTML: HTML — это исходная разметка (текст), DOM — живая структура в памяти, которая может отличаться от исходного HTML после манипуляций JS (например, в SPA разметка почти полностью генерируется скриптами).

Пример

<ul id="list">
  <li>Один</li>
  <li>Два</li>
</ul>
const list = document.getElementById('list')

// Чтение DOM
console.log(list.children.length) // 2

// Изменение DOM
const item = document.createElement('li')
item.textContent = 'Три'
list.appendChild(item)

// Теперь DOM отличается от исходного HTML,
// хотя в файле разметки третьего <li> нет

Дополнительные вопросы

  • Чем DOM отличается от Virtual DOM, который используют Vue/React?
  • Что такое reflow и repaint и почему частые манипуляции с DOM — это дорого?
  • Как работает делегирование событий через DOM (event bubbling)?

Связанные вопросы