itmo_conspects

Лекция 7. Объектная модель документа

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

HTML-элементы представляют из себя дерево, в котором узлы - это элементы. Вложенность HTML-элементов обозначается дочерними связями в дереве

Всего существует 12 типов узлов в объектной модели:

ELEMENT_NODE представляет элемент, который задается HTML-тегом, а TEXT_NODE - это узел с сырым текстом

Так <p>Это параграф</p> преобразуется в дерево с узлом p типа ELEMENT_NODE и дочерний текстовый узел Это параграф типа TEXT_NODE

Корень дерева в JavaScript представлен объектом document. От него можно получить непосредственно элемент html с помощью document.documentElement и элемент body с помощью document.body


В JavaScript есть 6 основных методов получения элементов из дерева объектной модели:

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

С ними нужно быть осторожными, так как некоторые браузеры обрабатывают новую строку в HTML-документе как текстовый узел

Еще узлы имеют такие свойства:


Содержимое элемента можно узнать или заменить с помощью:

Значения innerText и outerText равны, однако при записи строка принимается как экранированный текст, а не HTML-код, поэтому запись в outerText ведет к удалению исходного элемента

Запись свойств innerHTML и outerHTML ведет к парсингу нового значения и изменения объектной модели. Для изменения HTML-страницы предпочтительнее использовать не эти свойства, принимающие строки, а методы node.appendChild, node.insertBefore и другие

Также есть свойство node.textContent, которое показывает весь текст, включая скрытый с помощью display: none


Для редактирования дерева есть методы:

При вызове таких методов происходит событие пересчета дерева (reflow event), который можно поймать в своем скрипте (об этом позже)

Для редактирования узлов есть такие методы:

Обработка событий

На жизненном цикле веб-страницы может происходить множество событий, например, нажатие кнопки или прокрутка колеса мыши

Событие - это сигнал браузера о том, что что-то произошло. Для них браузер предоставляет API

Так событие возникает для какого-то элемента, и браузер вызывает для этого события привязанные к элементу функции JavaScript

События можно добавлять:

С помощью событий можно обрабатывать нажатия на элемент (click), наведение на элемент (mouseover), на правый клик мыши (contextmenu), на нажатие клавиатуры (keydown), на отправку формы (submit) и многое другое

Самое важное событие - DOMContentLoaded у document. Оно вызывается тогда, когда дерево объектной модели документа полностью загружено браузером, и над ним безопасно работать внутри JavaScript-кода. Поэтому весь код, требующий работы с элементами ограничивают в обрабатывающей функции:

document.addEventListener("DOMContentLoaded", function () {
    const elem = document.getElementById("myid");

    // ...
});