Document Object Model
DOM (от англ. Document Object Model — «объектная модель документа») — это не зависящий от платформы и языка программный интерфейс, позволяющий программам и скриптам получить доступ к содержимому HTML, XHTML и XML-документов, а также изменять содержимое, структуру и оформление таких документов.
Модель DOM не накладывает ограничений на структуру документа. Любой документ известной структуры с помощью DOM может быть представлен в виде дерева узлов, каждый узел которого представляет собой элемент, атрибут, текстовый, графический или любой другой объект. Узлы связаны между собой отношениями "родительский-дочерний".
Изначально различные браузеры имели собственные модели документов (DOM), несовместимые с остальными. Для обеспечения взаимной и обратной совместимости, специалисты международного консорциума W3C классифицировали эту модель по уровням, для каждого из которых была создана своя спецификация. Все эти спецификации объединены в общую группу, носящую название W3C DOM.
Еще один интерфейс прикладного программирования, называемый JDOM, обеспечивает более высокий, чем W3C DOM, уровень для работы с XML-документами на Java.
Содержание
История[править | править вики-текст]
История DOM переплетается с историей «браузерных войн» в конце 1990-х годов между Netscape Navigator и Microsoft Internet Explorer (и между первыми скриптовыми языками JavaScript и JScript) за то, чтобы широко использоваться в механизме вёрстки веб-страниц.
Традиционный DOM[править | править вики-текст]
JavaScript был выпущен Netscape Communications в 1996 году в рамках 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 для обратной совместимости.
Стандартизация[править | править вики-текст]
Организация World Wide Web Consortium (W3C), основанная в 1994 году для поддерживания и развития открытых стандартов World Wide Web, заставила Netscape Communications и Microsoft вместе с другими компаниями разработать стандарт для браузерных скриптовых языков под названием ECMAScript. Первая версия стандарта была опубликована в 1997 году. Последующие выпуски JavaScript и JScript стали реализовывать стандарт ECMAScript для лучшей межбраузерной совместимости.
После выхода ECMAScript W3C начала работу над стандартизацией DOM. Изначальный стандарт DOM, также известный как «DOM уровня 1», был рекомендован W3C в конце 1998 года. Примерно в это же время вышел Internet Explorer 5.0 с ограниченной поддержкой DOM уровня 1. DOM уровня 1 обеспечил полную объектную модель для всего HTML- или XML-документа, включая способ изменения любой части документа. Неадаптированные браузеры, например, Internet Explorer 4.x и Netscape 4.x, широко использовались вплоть до 2000 года.
DOM уровня 2 был опубликован в конце 2000 года. Он ввел функцию «getElementById», а также модель событий и поддержку XML namespace и CSS. DOM уровня 3 — текущая версия спецификации DOM, опубликованная в апреле 2004 года, добавила поддержку XPath и обработку событий клавиатуры, а также интерфейс для сериализации документа как XML.
В 2005 году большая часть W3C DOM поддерживалась основными браузерами, удовлетворяющими ECMAScript, включая Internet Explorer версии 6 (2001 год), Opera, Safari и браузеры, основанные на Gecko (в том числе Mozilla, Firefox, SeaMonkey и Camino).
Реализация DOM в веб-браузерах[править | править вики-текст]
Учитывая существование различных реализаций DOM в веб-браузерах, среди программистов распространена привычка проверять работоспособность тех или иных возможностей DOM для каждого конкретного браузера и только потом использовать их. Код ниже иллюстрирует способ проверки на поддержку стандартов W3CDOM перед тем, как запустить код, зависящий от результата этой проверки.
if (document.getElementById && document.getElementsByTagName) { // если методы getElementById и getElementsByTagName // доступны, то можно относительно точно предположить поддержку W3CDOM. obj = document.getElementById("navigation") // далее идёт другой код с использованием возможностей W3CDOM. // ..... }
Ещё один фрагмент кода JavaScript, позволяющий проверить заявленную поддержку различных расширений DOM в конкретном браузере.
function domImplementationTest(){ var featureArray = ['HTML', 'XML', 'Core', 'Views', 'StyleSheets', 'CSS', 'CSS2', 'Events', 'UIEvents', 'MouseEvents', 'HTMLEvents', 'MutationEvents', 'Range', 'Traversal']; var versionArray = ['1.0', '2.0', '3.0']; var i; var j; if(document.implementation && document.implementation.hasFeature){ for(i=0; i < featureArray.length; i++){ for(j=0; j < versionArray.length; j++){ document.write( 'Поддержка расширения '+ featureArray[i] + ' версии ' + versionArray[j] + ' : ' + (document.implementation.hasFeature(featureArray[i], versionArray[j]) ? '<font style="color:green">true</font>' : '<font style="color:red">false</font>') + '<br/>' ); } document.write('<br/>'); } } }
Так как DOM поддерживает навигацию в любой области (например, родитель и предыдущий брат) и учитывает произвольные изменения, реализация должна по крайней мере буферизировать документ, который (или некоторая разработанная форма которого) читался до этого времени.
Браузерный движок[править | править вики-текст]
Основная статья: Браузерный движок
Браузеры опираются на свой движок, когда происходит преобразование (парсинг) HTML-файлов в DOM. Некоторые браузерные движки, к примеру, Trident/MSHTML, тем или иным образом имеют привязку к определённому браузеру (в данном случае, к Internet Explorer). Такие же движки как WebKit и Gecko используются во множестве различных браузеров, таких как Safari, Google Chrome, RockMelt, Firefox или Flock. Различные браузерные движки поддерживают стандарты DOM на разных уровнях соответствия.
См. также: Comparison of layout engines (Document Object Model)(англ.)
Библиотеки[править | править вики-текст]
Уровни W3C DOM[править | править вики-текст]
Текущим уровнем спецификаций DOM является Уровень 2, но тем не менее некоторые части спецификаций Уровня 3 являются рекомендуемыми W3C.
- Уровень 0
- Включает в себя все специфические модели DOM, которые существовали до появления Уровня 1, например, document.images, document.forms, document.layers и document.all. Необходимо обратить внимание, что эти модели формально не являются спецификациями DOM, опубликованными W3C, а скорее являются информацией о том, что существовало до начала процесса стандартизации.
- Уровень 1
- Базовые функциональные возможности DOM (HTML и XML) в документах, такие как получение дерева узлов документа, возможность изменять и добавлять данные.
- Уровень 2
- Поддержка так называемого пространства имён XML <--filtered views--> и событий.
- Уровень 3
- Состоит из шести различных спецификаций:
- DOM Level 3 Core;
- DOM Level 3 Load and Save;
- DOM Level 3 XPath;
- DOM Level 3 Views and Formatting;
- DOM Level 3 Requirements;
- DOM Level 3 Validation.
- Эти спецификации являются дополнительными расширениями DOM.
Приложения[править | править вики-текст]
Веб-браузеры[править | править вики-текст]
Веб-браузеры не обязаны использовать DOM, чтобы исполнять HTML-документ. Однако DOM требуется для скриптов JavaScript, которые желают наблюдать или изменять веб-страницу динамически. Другими словами, Document Object Model — это инструмент, с помощью которого JavaScript видит содержимое HTML-страницы и состояние браузера.
Проблемы[править | править вики-текст]
Из-за несовместимости браузеров использование DOM иногда приводит к трудностям HTML-вёрстки и низкой надёжности страниц.
Спецификации[править | править вики-текст]
- Спецификация DOM Level 1
- Рекомендации W3C к Уровню 2:
- Рекомендации W3C к Уровню 3:
- Документы рабочей группы W3C к Уровню 3:
См. также[править | править вики-текст]
Ссылки[править | править вики-текст]
- Раздел DOM на сайте Всемирной паутины (W3C) (англ.)
- Доклады по DOM (англ.)
- Учебники по DOM (англ.)
- Какой уровень DOM поддерживает ваш браузер? (англ.)
- Что включает в себя каждый уровень DOM? (англ.)
- Скрипты W3C DOM и таблицы совместимости (англ.)
- Ссылка на Gecko DOM (англ.)
- Документация по khtml Library API (англ.)
| Стандарты Консорциума Всемирной паутины (W3C) | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Продукты и стандарты |
|
||||||||||||
| Организации |
|
||||||||||||
| ПО |
|
||||||||||||
| Конференции | |||||||||||||
| Веб и веб-сайты | |
|---|---|
| Глобально | |
| Локально | |
| Виды сайтов и сервисов |
Виртуальный атлас • Баннерная сеть • Библиотека • Блог (платформа) • Видеохостинг • Вики • Сайт-визитка • Вопрос-ответ • Закладки • Службы знакомств • Браузерная игра • Каталог ресурсов • Интернет-магазин • Микроблог • Новостной сайт • Поисковая система • Порносайт • Веб-почта • Социальная сеть • Тамблелог • BitTorrent-трекер • Файлообменник • Форум (Сервис • Имиджборд) • Фотохостинг • Чат |
| Создание и обслуживание |
Мастер • Разработка • Дизайн • Вёрстка • Программирование • Юзабилити • Опыт взаимодействия • Продвижение сайта • Поисковая оптимизация (SEO) • Хостинг • Системный администратор • Модератор • Учётная запись • Авторизация |
| Типы макетов, страниц, сайтов |
|
| Техническое | |
| Маркетинг | |
| Социум и культура | |

