DOM

Материал из Энциклопедия интернет-маркетинга MarketWiki

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

DOM не является частью языка HTML или JavaScript, а представляет собой независимый стандарт, разработанный консорциумом W3C. Он определяет, как браузер должен представлять документ в памяти и каким образом с ним можно взаимодействовать программно.

Представление документа в виде дерева

[править]

Когда браузер загружает HTML-страницу, он создаёт DOM-дерево, где каждый HTML-элемент, атрибут и текстовый фрагмент становится узлом дерева. Корнем дерева является объект document, от которого отходят все остальные узлы.

Для наглядности - простой HTML-код:

<!DOCTYPE html>
<html>
<head>
    <title>Заголовок страницы</title>
</head>
<body>
    <h1>Основной заголовок</h1>
    <p>Это абзац текста.</p>
</body>
</html>

DOM-дерево для этого документа будет выглядеть так:

  • document
   * html
       * head
           * title
               * "Заголовок страницы"
       * body
           * h1
               * "Основной заголовок"
           * p
               * "Это абзац текста."

Типы узлов

[править]

В DOM существует несколько типов узлов:

  • Узел-элемент (element node) - соответствует HTML-тегу (например, <body>, <p>, <h1>).
  • Узел-атрибут (attribute node) - соответствует атрибуту тега (например, class="example").
  • Текстовый узел (text node) - содержит текст внутри элемента.
  • Узел-комментарий (comment node) - содержит HTML-комментарии.
  • Узел-документ (document node) - корневой узел, представляющий весь документ.

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

[править]

JavaScript предоставляет методы для поиска и доступа к элементам DOM:

  • document.getElementById('id') - поиск элемента по уникальному идентификатору.
  • document.getElementsByClassName('class') - поиск элементов по имени класса.
  • document.getElementsByTagName('tag') - поиск элементов по имени тега.
  • document.querySelector('селектор') - поиск первого элемента, соответствующего CSS-селектору.
  • document.querySelectorAll('селектор') - поиск всех элементов, соответствующих CSS-селектору.

Пример:

let header = document.getElementById('main-header');
let paragraphs = document.getElementsByTagName('p');
let firstButton = document.querySelector('.btn');

Изменение DOM

[править]

JavaScript позволяет изменять найденные элементы:

  • Изменять содержимое: element.innerHTML = "новый текст".
  • Изменять атрибуты: element.setAttribute('class', 'new-class').
  • Изменять стили: element.style.color = "red".
  • Создавать новые элементы: document.createElement('div').
  • Добавлять элементы в документ: parent.appendChild(newElement).
  • Удалять элементы: element.remove() или parent.removeChild(element).

События DOM

[править]

DOM позволяет реагировать на действия пользователя с помощью событий:

  • click - клик по элементу.
  • mouseover - наведение курсора.
  • mouseout - уход курсора.
  • keydown - нажатие клавиши.
  • submit - отправка формы.
  • load - загрузка страницы.

Пример обработки события:

let button = document.getElementById('myButton');
button.addEventListener('click', function() {
    alert('Кнопка нажата!');
});

DOM и виртуальный DOM

[править]

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

DOM и SEO

[править]

Поисковые роботы анализируют DOM-дерево страницы, чтобы понять её структуру и содержимое. Некорректно построенное DOM-дерево (например, из-за ошибок в JavaScript) может привести к тому, что поисковый робот не увидит часть контента, что негативно скажется на ранжировании. Особенно это актуально для одностраничных приложений (SPA), где контент генерируется динамически.

Связанные термины

[править]