Интерфейс 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. Кроме того, для некоторых типов узлов определены свои, дополнительные свойства и методы.