Документен обектен модел
DOM (от английски: Document Object Model – „документен обектен модел“) е многоплатформен и езиково независим приложно-програмен интерфейс, който позволява на програми и скриптове да получат достъп до съдържанието на обекти в HTML, XHTML и XML документи.
DOM не налага ограничения за структурата на документа. Всяка известна структура на документ с помощта на DOM може да бъде представена в дървовидна структура от взаимовръзки, всяка от която връзки представлява елемент, атрибут, текст, графика, или друг обект. Връзките са свързани помежду си в йерархия „родител – дете“.
Първоначално различните браузъри разполагали със собствени модели документи (DOM), които са били несъвместими с другите. За да се гарантира взаимната и обратната съвместимост, специалистите от W3C са класифицирали този модел в нива, всяко със своя собствена спецификация. Всички тези характеристики са комбинирани в една обща група, наречена W3C DOM.
История
[редактиране | редактиране на кода]История на DOM се преплита с историята на „войните на браузърите“ в края на 1990 година между Netscape Navigator, Microsoft Internet Explorer и между първите скриптови езици JavaScript и JScript, които са широко използвани в оформлението на клиентската част на уеб браузърите.
DOM се е появил като спецификация, за да може JavaScript и Java програми да бъдат преносими за различни уеб браузъри.
Традиционен DOM
[редактиране | редактиране на кода]JavaScript е създаден от Netscape Communications през 1996 г. като част от Netscape Navigator 2.0. Конкурентът на Netscape – Microsoft, пуска по-късно същата година Internet Explorer 3.0 с порт на JavaScript, наречен JScript. JavaScript и JScript позволяват на разработчиците да създават интерактивни уеб страници от страна на клиента. Ограничените възможности за откриване на създадените от потребителите събития и промяна на HTML документите в първото поколение на тези езици в крайна сметка става известено като DOM Level 0 или традиционен DOM. За DOM Level 0 няма разработен самостоятелен стандарт, но е бил частично описан в спецификацията на HTML4.
Традиционният DOM е ограничен във видовете елементи, които могат да бъдат достъпни. Такива елементи като форма (form), връзка (link) и изображение (image) могат да бъдат достъпни чрез използването на йерархични имена, които започват от корена на документния обект. Йерархичното име може да използва или името или последователните индекси на общия елемент. Например въвеждане на форма може да бъде зададено като 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 давал възможност за манипулиране на свойствата на Cascading Style Sheets (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 Level 1 е бил препоръчан от W3C в края на 1998 година. Почти по същото време Internet Explorer 5.0 е пуснат с ограничена поддръжка на DOM Level 1.
DOM Level 1 е предоставил пълен обектен модел за всички HTML или XML документ, включително начин за промяна на която и да е част от документа.
DOM Level 2 е бил публикуван в края на 2000. Той въвежда функцията getElementById
, както и модела на събитието (event model), поддръжка на XML пространство от имена (XML namespaces) и CSS.
DOM Level 3 – текущата версия на спецификацията DOM, публикувана през април 2004 г., добавя поддръжка за XPath и обработка на събития, произлезли от клавиатурата (keyboard event handling), както и интерфейс за сериализация на документ като XML.
През 2005 г. голяма част от W3C DOM се поддържа от основните браузъри, които отговарят ECMAScript, включително Internet Explorer версия 6 (2001), Opera, Safari и браузъри, базирани на Gecko (включително Mozilla Firefox, SeaMonkey и Camino).
Изпълнение на DOM в уеб браузъри
[редактиране | редактиране на кода]Следният HTML код дефинира една таблица с таблицата от елемент и различни поделементи:
<table>
<thead>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>
</thead>
<tbody>
<tr>
<td>Petar</td>
<td>Petrov</td>
</tr>
</tbody>
</table>
Така изглежда в браузъра:
Firstname | Lastname |
---|---|
Petar | Petrov |
Като се има предвид съществуването на различни DOM реализации в уеб браузърите, сред програмистите е разпространен навикът да се проверява изпълнението на определени възможности на DOM за всеки браузър и след това да ги използват. Кодът по-долу показва начин за проверка за стандарти, поддържащи W3CDOM, преди да се пусне кодът, зависещ от резултата на този тест.
if (document.getElementById && document.getElementsByTagName) {
// ако методите getElementById и getElementsByTagName
// са достъпни, то може относително точно да се предположи, че се поддържа W3CDOM.
obj = document.getElementById("navigation")
// следва друг код чиито изпълнение е възможно с W3CDOM.
// ….
}
W3C DOM нива
[редактиране | редактиране на кода]Текущото ниво на спецификацията на DOM е Level 2, но все пак някои части на спецификацията на Level 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 страницата и състоянието на браузъра.