Открыть сервис

DOM

DOM (от англ. Document Object Model — объектная модель документа) — это программный интерфейс (API), предоставляющий браузеру и скриптовым языкам (прежде всего JavaScript) структурированное представление HTML- или XML-документа в виде дерева объектов (узлов), а также набор методов для доступа к этим объектам, их изменения, добавления и удаления. DOM является кросс-платформенным и языконезависимым стандартом, определённым Консорциумом Всемирной паутины (W3C).

История и развитие

Истоки и первые реализации

До появления единого стандарта DOM каждый браузер реализовывал собственную модель документа, что приводило к серьёзным проблемам совместимости. В середине 1990-х годов, с ростом популярности JavaScript и технологии Dynamic HTML (DHTML), разработчики столкнулись с тем, что один и тот же код мог работать в Internet Explorer, но не в Netscape Navigator, и наоборот. Для решения этой проблемы W3C начал работу по стандартизации.

Уровни DOM (DOM Levels)

Стандарт DOM развивался поэтапно:

Архитектура и структура

Древовидная модель

DOM представляет документ как иерархическое дерево узлов. Каждый элемент HTML-разметки, атрибут, текстовый фрагмент или комментарий является отдельным узлом. Корнем дерева является объект Document. От него отходят ветви — дочерние узлы, которые, в свою очередь, могут иметь свои дочерние узлы.

Пример HTML-кода: ``html <!DOCTYPE html> <html> <head> <title>Пример</title> </head> <body> <p>Текст абзаца</p> </body> </html> `` В DOM это превращается в дерево, где:

Типы узлов

Спецификация DOM определяет несколько типов узлов, каждый из которых имеет свой числовой код (nodeType):

Тип узлаnodeTypeОписаниеПример
Element1Представляет HTML- или XML-элемент. Самый распространённый тип.<div>, <a>, <span>
Attr2Представляет атрибут элемента. В современном DOM редко используется напрямую, атрибуты доступны через методы элемента.class="main", id="header"
Text3Содержит текстовое содержимое элемента или атрибута.«Пример», «Текст абзаца»
Comment8Представляет комментарий в разметке.<!-- это комментарий -->
Document9Корневой узел, представляющий весь документ.document
DocumentType10Содержит информацию о типе документа (DTD).<!DOCTYPE html>
DocumentFragment11«Лёгкий» контейнер для временного хранения фрагментов документа. Не отображается в DOM.

Навигация по дереву

Для перемещения между узлами используются свойства навигации:

Для работы с элементами (игнорируя текстовые узлы) существуют аналогичные свойства: parentElement, children, firstElementChild, lastElementChild, nextElementSibling, previousElementSibling.

Основные интерфейсы и методы

Доступ к элементам

Для поиска узлов в дереве DOM предоставляются методы объекта document:

Манипуляция содержимым и атрибутами

Создание и удаление узлов

Работа со стилями

Модель событий (DOM Events)

DOM предоставляет механизм для обработки действий пользователя или изменений состояния документа (клики, нажатия клавиш, загрузка страницы, отправка формы).

Фазы события

Согласно DOM Level 2, стандартное событие проходит три фазы:

  1. Фаза перехвата (capturing phase): Событие движется от корня (document) к целевому элементу.
  2. Фаза цели (target phase): Событие достигает целевого элемента.
  3. Фаза всплытия (bubbling phase): Событие движется обратно от целевого элемента к корню. Большинство событий (например, click) всплывают.

Добавление и удаление обработчиков

Производительность и критика

Проблемы производительности

DOM — это интерфейс, а не само содержимое. Каждый раз, когда скрипт обращается к DOM, происходит «переход» между средой выполнения JavaScript (движок V8, SpiderMonkey и т.д.) и средой рендеринга браузера. Частые и неоптимальные обращения (например, изменение стилей в цикле) могут приводить к перекомпоновке (reflow) и перерисовке (repaint) страницы, что замедляет работу.

Виртуальный DOM (Virtual DOM)

Для решения проблем производительности в некоторых фреймворках (React, Vue.js) используется концепция виртуального DOM. Вместо прямого изменения реального DOM, изменения сначала вносятся в лёгкую копию (виртуальное дерево), а затем специальный алгоритм (diffing) вычисляет минимальный набор изменений и применяет их к реальному DOM за одну операцию. Это значительно снижает количество дорогостоящих перестроек.

Критика

Применение

DOM является основой для всех современных веб-приложений. Он используется для:

Источники

  1. Спецификация DOM Living Standard (WHATWG).
  2. Рекомендации W3C: DOM Level 1, Level 2, Level 3.
  3. Документация Mozilla Developer Network (MDN) по DOM.
  4. Учебник «Современный учебник JavaScript» (learn.javascript.ru), раздел «Document Object Model».
  5. Книга Дэвида Флэнагана «JavaScript. Подробное руководство» (7-е издание).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →