Интерфейс Node
Интерфейсы DOM
В спецификации DOM используется не понятие объект, а понятие интерфейс. Интерфейс, в отличие от объекта задает описание свойств объекта и описание его методов, т.е. имена методов, их параметры, возвращаемые значения, а также описание алгоритмов методов, ошибочные ситуации и особенности их реализации.
При описании интерфейсов в спецификациях DOM используется язык определения интерфейсов IDL (Interface Definition Language), разработанный группой управления объектами OMG (Object Management Group).
Объектная модель документов определяет:
· интерфейсы, используемые для представления объектов документа и манипулирования с ним;
· семантику (смысл) этих интерфейсов, включая и поведение, и параметры;
· связи и взаимодействие между этими интерфейсами.
Реализация интерфейсов, т.е. их представление в виде объектов с заданными свойствами и запрограммированными методами должна выполняться производителем Web-браузера.
Основное назначение такой реализации – предоставить возможность доступа и манипулирования элементами документа из программы с помощью объектов документа, а также обеспечить взаимодействие между объектами, используя языки сценариев, например, JavaScript.
В объектной модели документа, реализованной для HTML, в узлах иерархического дерева документа могут находиться любые элементы HTML или текст, называемые узловыми элементами. Эти элементы могут содержать, в свою очередь, дочерние узлы различных типов или являться конечными узлами (листьями).
Свойства и поведение узлового элемента описываются с помощью интерфейса Node. Помимо того, что узловой элемент является объектом типа Node, он также имеет и свой собственный функциональный тип, т.е. тип, зависящий от назначения элемента.
Для HTML определены следующие типы узлов и соответствующие им интерфейсы:
· Document – представляет весь документ HTML (является корнем дерева документа и содержит узлы типа Element и Comment, а также один узел DocumentType);
· DocumentType – тип документа HTML (представлен элементом <!DOCTYPE>), не имеет дочерних узлов;
· Element – элемент документа (может содержать другие узлы типа Element, а также узлы типов Text и Comment);
· Attr – атрибут объекта Element (может содержать объекты типа Text);
· Comment – комментарий (не имеет дочерних элементов);
· Text – текстовое содержимое узла (в HTML содержимое контейнера родительского узла), не имеет дочерних элементов;
· DocumentFragment – фрагмент документа (содержит отдельные «ветви» дерева документа, состоящие из узлов типа Element, Text и Comment)
Для интерфейса Node определены следующие свойства:
· ownerDocument – содержит объект типа Document, связанный с данным узлом;
· parentNode – содержит родительский узел данного узла;
· childNodes – содержит все дочерние узлы данного узла;
· firstChild – содержит первый объект набора childNodes;
· lastChild – содержит последний объект набора childNodes;
· nextSibling – содержит следующий дочерний узел родительского узла;
· previousSibling – содержит следующий дочерний узел родительского узла;
· nodeName – содержит имя узла (для узла типа Document – "#document", для узла типа DocumentType – "html", для узла типа DocumentFragment – "#document-fragment", для узла типа Element – имя тега, для узла типа Attr – имя атрибута, для узла типа Comment – "#comment" и для узла типа Text – "#text");
· nodeType – содержит целое число, характеризующее тип узла (для узла типа Document – 9, для узла типа DocumentType – 10, для узла типа DocumentFragment – 11, для узла типа Element – 1, для узла типа Attr – 2, для узла типа Comment – 8 и для узла типа Text – 3);
· nodeValue – содержит значение узла для узла типа Document – "null", для узла типа DocumentType – "null", для узла типа DocumentFragment – "null", для узла типа Element – "null", для узла типа Attr – значение атрибута, для узла типа Comment – строка комментария и для узла типа Text – строка текста);
· attributes – содержит набор атрибутов объекта (узлов типа Attr).
Все свойства, за исключением свойств ownerDocument и nodeValue, являются свойствами только для чтения, т.е. их значения нельзя изменять.
Пример 4.5.2. Значения некоторых свойств узлов документа HTML в примере 4.5.1:
· значением свойства ownerDocument для всех узлов документа будет узел с именем #document, типа 9 и со значением null;
· значением свойства parentNode для узла title будет узел с именем head, типа 1 и со значением null;
· значением свойства firstChild для узла p с id="p1" будет узел с именем #text, типа 3 и со значением "В блоковый элемент можно добавлять ";
· значением свойства lastChild для узла p с id="p1" будет узел с именем #text, типа 3 и со значением ".";
· значением свойства previousSibling для узла span с id="sp1" будет узел с именем #text, типа 3 и со значением "В блоковый элемент можно добавлять ";
· значением свойства nextSibling для узла span с id="sp1" будет узел с именем #text, типа 3 и со значением " и даже другие блоковые элементы ".
Для интерфейса Node определены также следующие методы:
· hasChildNodes()– проверяет наличие дочерних узлов у данного узла и возвращает true, если дочерние узлы есть, иначе – false;
· appendChild(узел) – добавляет новый узел в конец набора дочерних узлов данного узла и возвращает добавленный объект типа Node;
· insertBefore(новый-узел, узел)– вставляет дочерний новый-узел перед указанным дочерним узлом данного узла и возвращает добавленный объект типа Node;
· replaceChild(новый-узел, узел)– заменяет дочерний узел данного узла на заданный новый-узел и возвращает замененный объект типа Node;
· removeChild(узел)– удаляет указанный дочерний узел данного узла и возвращает удаленный объект типа Node;
· cloneNode(глубина)– создает дубликат указанного узла с теми же атрибутами и значениями атрибутов. Если в качестве параметра глубина указано true копируется также содержимое узла (дочерний текстовый узел), если false – дочерний узел не копируется. Возвращает созданный объект типа Node;
· normalize()– приводит все узлы типа Text, расположенные ниже этого узла к нормальной форме, т.е. объединяет все соседние узлы типа Text в один узел.
Интерфейс Node практически не используется непосредственно, однако его свойства и методы используются его дочерними интерфейсами Document, DocumentFragment, Element, Attr, Comment и Text. Кроме того, для некоторых типов узлов определены свои, дополнительные свойства и методы.