DOM (от англ. Document Object Model — «объектная модель документа») — это не зависящий от платформы и языка программный интерфейс, позволяющий программам и скриптам получить доступ к содержимому HTML, XHTML и XML-документов, а также изменять содержимое, структуру и оформление таких документов.
Модель DOM не накладывает ограничений на структуру документа. Любой документ известной структуры с помощью DOM может быть представлен в виде дерева узлов, каждый узел которого представляет собой элемент, атрибут, текстовый, графический или любой другой объект. Узлы связаны между собой отношениями «родительский-дочерний».
Изначально различные браузеры имели собственные модели документов (DOM), несовместимые с остальными. Для обеспечения взаимной и обратной совместимости, специалисты международного консорциума W3C классифицировали эту модель по уровням, для каждого из которых была создана своя спецификация. Все эти спецификации объединены в общую группу, носящую название W3C DOM.
Ещё один интерфейс прикладного программирования, называемый JDOM, обеспечивает более высокий, чем W3C DOM, уровень для работы с XML-документами на Java.
Традиционный DOM
JavaScript был выпущен Netscape Communications в 1995 году в рамках Netscape Navigator 2.0. Конкурент Netscape — Microsoft выпустил позже в том же году Internet Explorer 3.0 с портом JavaScript, названным JScript. JavaScript и JScript позволяют разработчикам создавать интерактивные веб-страницы со стороны клиента. Ограниченные возможности обнаружения создаваемых пользователем событий и изменения документа HTML в первом поколении этих языков в итоге стали известны как «DOM уровня 0» или «традиционный DOM». Для DOM уровня 0 не было разработано никакого независимого стандарта, однако он был частично описан в спецификации HTML4.
Традиционный DOM был ограничен в типах элементов, к которым можно получить доступ. К таким элементам как форма (form), ссылка (link) и изображение (image) можно было обращаться с помощью иерархических имён, которые начинались с корня объекта документа. Иерархическое имя могло использовать либо имя, либо последовательный индекс общего элемента. Например, элемент form input может быть доступен как «document.formName.inputName» или как «document.forms[0].elements[0]».
Традиционный DOM давал возможность подтверждения формы с клиентской стороны и популярный эффект «трансформации объекта».
Промежуточный DOM
В 1997 году Netscape и Microsoft выпустили Netscape Navigator и Internet Explorer версии 4.0, добавив поддержку Dynamic HTML (DHTML), предоставляющего возможность изменения функциональности HTML документа при его загрузке. DHTML требовал расширений для элементарного объекта document, имевшегося в традиционной реализации DOM. Поскольку JScript был основан на JavaScript, традиционные реализации DOM были в значительной степени совместимы, однако расширения DOM для DHTML были разработаны параллельно каждым из создателей браузера и остались несовместимыми. Эти версии DOM стали известны как «промежуточный DOM».
Промежуточный DOM давал возможность манипулировать свойствами каскадных таблиц стилей (CSS), влияющими на отображение документа. Он также обеспечивал доступ к новому свойству под названием «слои» через свойства «document.layers» (в Netscape Navigator) и «document.all» (в Internet Explorer). Из-за исходной несовместимости в промежуточном DOM разработка веб-страниц требовала специальной обработки для каждого случая.
Более поздние версии Netscape Navigator отказались от поддержки промежуточного DOM. Internet Explorer продолжает поддержку своего промежуточного DOM для обратной совместимости.