Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / DHTML /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Узлы дерева документа - Программирование от RIN.RU
Узлы дерева документа




В этой главе мы рассматриваем базовый тип узлов дерева документа и списки, образованные такими узлами.


Абстрактный узел: интерфейс Node


Поддержка :Поддерживается для XML-документов (XMLDOMNode); для HTML-документов поддерживается частично.
DOM 1 полностью, DOM 2 частично.



Интерфейс Node соответствует абстрактному узлу дерева XML- или HTML-документа. Все конкретные составляющие документа реализуются интерфейсами, которые являются его потомками. Тип узла задается значением его свойства nodeType в соответствии со следующей таблицей:


Таблица 3. Типы узлов DOM
НазваниеЗначениеИнтерфейсОписание
ELEMENT_NODE1ElementЭлемент
ATTRIBUTE_NODE2AttrАтрибут
TEXT_NODE3TextТекст
CDATA_SECTION_NODE4CDATASectionСекция CDATA
ENTITY_REFERENCE_NODE5EntityReferenceСсылка на раздел
ENTITY_NODE6EntityРаздел документа
PROCESSING_INSTRUCTION_NODE7ProcessingInstructionДиректива
COMMENT_NODE8CommentКомментарий
DOCUMENT_NODE9DocumentДокумент
DOCUMENT_TYPE_NODE10DocumentTypeТип документа
DOCUMENT_FRAGMENT_NODE11DocumentFragmentФрагмент документа
NOTATION_NODE12NotationНотация



Значения свойств узла nodeName, nodeValue и attributes меняются в зависимости от его типа:


Таблица 4. Свойства узлов DOM
ИнтерфейсnodeNamenodeValueattributes
AttrИмя атрибутаЗначение атрибутаnull
CDATASection#cdata-sectionСодержимое секции CDATAnull
Document#documentnullnull
DocumentFragment#document-fragmentnullnull
DocumentTypeИмя типа документаnullnull
ElementТег элементаnullNamedNodeMap
EntityИмя разделаnullnull
EntityReferenceИмя разделаnullnull
NotationИмя нотацииnullnull
ProcessingInstructionИмя директивыСодержимое директивыnull
Text#textСодержимое текстового узлаnull



Примечание. Internet Explorer поддерживает только узлы типа Element, Attr и Text. Для остальных типов узлов перечисленные в таблице свойства не определены.




Свойства интерфейса Node
СвойствоИзменяемоеМодельОписание
attributesНетDOM 1Атрибуты узла.
childNodesНетDOM 1Список детей.
firstChildНетDOM 1Первый ребенок.
lastChildНетDOM 1Последний ребенок.
localNameНетDOM 2Локальное имя в пространстве имен.
namespaceURIНетDOM 2URI пространства имен.
nextSiblingНетDOM 1Следующий узел дерева.
nodeNameНетDOM 1Имя узла.
nodeTypeНетDOM 1Тип узла.
nodeValueДаDOM 1Значение узла.
ownerDocumentНетDOM 1Документ - владелец узла.
parentNodeНетDOM 1Отец данного узла.
prefixДаDOM 2Префикс пространства имен.
previousSiblingНетDOM 1Предыдущий узел дерева.



Методы интерфейса Node
СвойствоМодельОписание
appendChildDOM 1Добавляет сына в конец списка детей.
cloneNodeDOM 1Создает копию данного узла.
hasAttrbutesDOM 2Проверяет наличие у узла атрибутов.
hasChildNodesDOM 1Проверяет наличие у узла детей.
insertBeforeDOM 1Вставляет новый узел перед заданным сыном.
isSupportedDOM 2Проверяет свойство реализации DOM.
normalizeDOM 1Нормализует текстовое содержимое узла.
removeChildDOM 1Удаляет заданного сына.
replaceChildDOM 1Заменяет заданного сына новым узлом.



Свойство attributes


Синтаксис:  узел.attributes
Изменяемое: нет


Поддержка :Для XML-документов соответствует стандарту; для HTML-документов частично (см. прим.).
Соответствует стандарту.



Свойство attributes возвращает объект типа NamedNodeMap, содержащий список всех атрибутов данного узла, если узел имеет тип Element, и null в противном случае.


Примечание. В Internet Explorer это свойство реализовано нестандартно:



  1. Список атрибутов элемента является статическим, а не живым, т. е. изменение атрибутов элемента не влечет его автоматического обновления.

  2. Этот список не содержит атрибута style (для доступа к нему используется нестандартное свойство узел.style.cssText) и expando-атрибутов.




Следующий пример



<BODY bgcolor="yellow" text="green">
<SCRIPT>
var body = document.getElementsByTagName("BODY")[0];
var attrs = body.attributes;
for (var i = 0; i < attrs.length; i++) {
if (attrs[i].nodeValue)
document.write(attrs[i].nodeName, "=", attrs[i].nodeValue, " ");
}
</SCRIPT>
</BODY>





выведет в Gecko текст: bgcolor=yellow text=green, а в Internet Explorer: contentEditable=inherit text=1140883456 bgColor=-1694433281.


Свойство childNodes


Синтаксис:  узел.childNodes
Изменяемое: нет


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Свойство childNodes возвращает объект типа NodeList, содержащий список всех детей данного узла. Если узел не имеет детей, то возвращается список нулевой длины. Следующий пример



<BODY>
<SCRIPT>
var body = document.getElementsByTagName("BODY")[0];
var list = body.childNodes;
for (var i = 0; i < list.length; i++) {
document.write(list[i].nodeName, " ");
}
</SCRIPT>
</BODY>





выведет в Gecko текст: #text SCRIPT, а в Internet Explorer: SCRIPT #text. Как мы видим, порядок элементов в списке может быть любым; гарантируется только, что в нем присутствуют все дети данного узла.


Свойство firstChild


Синтаксис:  узел.firstChild
Изменяемое: нет


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Свойство firstChild возвращает указатель на первый узел, являющийся сыном данного узла. Если узел не имеет детей, то возвращается null. Это свойство эквивалентно выражению узел.childNodes[0].


Свойство lastChild


Синтаксис:  узел.lastChild
Изменяемое: нет


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Свойство lastChild возвращает указатель на последний узел, являющийся сыном данного узла. Если узел не имеет детей, то возвращается null. Это свойство эквивалентно выражению узел.childNodes[узел.childNodes.length-1].


Свойство localName


Синтаксис:  узел.localName
Изменяемое: нет


Поддержка :Не поддерживается.
Не поддерживается.



Свойство localName возвращает строку, содержащую локальную часть ограниченного имени узла. Оно имеет смысл только для узлов типа Element и Attr, созданных соответственно методами CreateElementNS и CreateAttributeNS. В остальных случаях возвращается null.


Свойство namespaceURI


Синтаксис:  узел.namespaceURI
Изменяемое: нет


Поддержка :Только для XML-документов.
Не поддерживается.



Свойство namespaceURI возвращает строку, содержащую URI пространства имен данного узла. Оно имеет смысл только для узлов типа Element и Attr, созданных соответственно методами CreateElementNS и CreateAttributeNS. В остальных случаях возвращается null.


Свойство nextSibling


Синтаксис:  узел.nextSibling
Изменяемое: нет


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Свойство nextSibling возвращает указатель на узел, непосредственно следующий в документе за данным узлом. Если такого узла нет, то возвращается null.


Свойство nodeName


Синтаксис:  узел.nodeName
Изменяемое: нет


Поддержка :Для XML-документов соответствует стандарту; для HTML-документов частично (см. прим. к Таблице 4).
Соответствует стандарту.



Свойство nodeName возвращает строку, содержащую имя данного узла согласно Таблицы 4. Пример: оператор alert(document.nodeName) выведет в Gecko строку #document (в Internet Explorer имя узла Document не определено).


Свойство nodeType


Синтаксис:  узел.nodeType
Изменяемое: нет


Поддержка :Для XML-документов соответствует стандарту; для HTML-документов частично (см. прим.).
Соответствует стандарту.



Свойство nodeType возвращает тип данного узла согласно Таблицы 3.


Примечание. В Internet Explorer это свойство реализовано для узлов Element и Text. Для остальных типов узлов оно не определено.


Пример: оператор alert(document.nodeName) выведет в Gecko строку 9.




Свойство nodeValue


Синтаксис:  узел.nodeValue
Изменяемое: да
Исключения: NO_MODIFICATION_ALLOWED_ERR (при записи), DOMSTRING_SIZE_ERR (при чтении)


Поддержка :Cоответствует стандарту.
Соответствует стандарту.



Свойство nodeValue обеспечивает доступ к значению данного узла. Значение узла зависит от его типа (см. Таблицу 4.4). Если значением узла может быть только null, то попытка изменить его значение игнорируется. Пример:



var text = document.createTextNode("");
text.nodeValue = "Пример абзаца.";
var elem = document.createElement("P");
elem.appendChild(text);
document.body.appendChild(elem);





Свойство ownerDocument


Синтаксис:  узел.ownerDocument
Изменяемое: нет


Поддержка :Только для XML-документов.
Соответствует стандарту.



Свойство ownerDocument возвращает указатель на объект Document, к которому принадлежит данный узел. Для узлов типа Document и DocumentType, которые еще не связаны с конкретным документом, возвращается null. Пример:



var elem = document.createElement("P");
document.body.appendChild(elem);
alert(elem.ownerDocument.documentElement.nodeName);





Свойство parentNode


Синтаксис:  узел.parentNode
Изменяемое: нет


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Свойство parentNode возвращает указатель на узел, являющийся отцом данного узла. Если узел не имеет отца, то возвращается null.


Свойство prefix


Синтаксис:  узел.prefix
Изменяемое: да
Исключения: INVALID_CHARACTER_ERR, NO_MODIFICATION_ALLOWED_ERR, NAMESPACE_ERR


Поддержка :Только для XML-документов; неизменяемое.
Не поддерживается.



Свойство prefix возвращает строку, содержащую префикс пространства имен данного узла. Оно имеет смысл только для узлов типа Element и Attr, созданных соответственно методами CreateElementNS и CreateAttributeNS. В остальных случаях возвращается null.


При записи этого свойства автоматически изменяются свойство узла nodeName, содержащее ограниченное имя узла, а также свойства tagName (если это Element) и name (если это Attr).


Свойство previousSibling


Синтаксис:  узел.previousSibling
Изменяемое: нет


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Свойство previousSibling возвращает указатель на узел, непосредственно предшествующий в документе данному узлу. Если такого узла нет, то возвращается null.


Метод appendChild


Синтаксис:  узел.appendChild(newChild)
Аргументы: newChild - выражение типа Node
Результат: узел Node
Исключения: HIERARCHY_REQUEST_ERR, WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Метод appendChild добавляет узел newChild в конец списка детей данного узла и возвращает его в качестве результата. Если узел newChild уже был в списке, то он сначала удаляется, а затем добавляется. Пример: сценарий



var elem = document.createElement("IMG");
document.body.appendChild(elem);
alert(document.body.lastChild.tagName);





выведет на экран текст IMG.


Метод cloneNode


Синтаксис:  узел.cloneNode(deep)
Аргументы: deep - логическое выражение
Результат: новый узел Node
Исключения: нет


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Метод cloneNode создает копию данного узла и возвращает ее. Если аргумент deep равен true, то создается копия поддерева документа, начиная с данного узла; если он равен false, то копируется только сам узел (и его атрибуты, если это Element).


Метод hasAttributes


Синтаксис:  узел.hasAttributes()
Результат: логическое значение
Исключения: нет


Поддержка :Не поддерживается.
Соответствует стандарту.



Метод hasAttributes возвращает true, если узел является элементом и имеет хотя бы один атрибут. В остальных случаях возвращается false. Вызов этого метода эквивалентен выражению (узел.attributes.length != 0).


Метод hasChildNodes


Синтаксис:  узел.hasChildNodes()
Результат: логическое значение
Исключения: нет


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Метод hasChildNodes возвращает true, если узел имеет хотя бы одного ребенка; в противном случае возвращается false. Вызов этого метода эквивалентен выражению (узел.childNodes.length != 0).




Метод insertBefore


Синтаксис:  узел.insertBefore(newChild, refChild)
Аргументы: newChild, refChild - выражения типа Node
Результат: узел Node
Исключения: HIERARCHY_REQUEST_ERR, WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR, NOT_FOUND_ERR


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Метод insertBefore вставляет узел newChild в список детей данного узла перед узлом refChild и возвращает его в качестве результата. Если узел newChild уже был в списке, то он сначала удаляется, а затем добавляется. Пример: сценарий



var elem = document.createElement("IMG");
document.body.insertBefore(elem, document.body.firstChild);
alert(document.body.firstChild.tagName);





выведет на экран текст IMG.


Метод isSupported


Синтаксис:  объект.isSupported(feature, version)
Аргументы: feature, version - выражения типа DOMString
Результат: логическое значение
Исключения: нет


Поддержка :Не поддерживается.
Соответствует стандарту.



Метод isSupported возвращает true, если реализация DOM поддерживает указанное свойство, и false в противном случае. Имя свойства (в любом регистре) задается аргументом feature; оно должно соответствовать правилам образования имен XML. Аргумент version задает имя версии проверяемого свойства. Если он не задан, то возвращается true, если поддерживается хотя бы какая-то версия данного свойства. Ср. метод DOMImplementation.hasFeature.


В Gecko значениями feature могут быть строки "XML" и "HTML", а значением version - строки "1.0" и "2.0". Пример:



alert(document.body.isSupported("HTML", "1.0"));
alert(document.body.isSupported("HTML", "2.0"));
alert(document.body.isSupported("HTML", "3.0"));





Первые два оператора alert выведут строку true, а третий false.


Метод normalize


Синтаксис:  узел.normalize()
Исключения: нет


Поддержка :Только для XML-документов.
Соответствует стандарту.



Метод normalize нормализует текстовое содержимое данного узла. Нормализация состоит в том, что пустые текстовые узлы удаляются, а соседние текстовые узлы сливаются в один. В результате остаются только текстовые узлы, разделенные какими-либо символами разметки (тегами, комментариями, директивами, секциями CDATA или ссылками на разделы). Нормализованная форма элементов дерева обеспечивает неизменность его структуры при сохранении и перезагрузке. Следующий пример нормализует все абзацы документа.



var pars = document.getElementsByTagName("P");
for (var i = 0; i < pars.length; i++)
pars[i].normalize();





Метод removeChild


Синтаксис:  узел.removeChild(oldChild)
Аргументы: oldChild - выражение типа Node
Результат: узел Node
Исключения: NO_MODIFICATION_ALLOWED_ERR, NOT_FOUND_ERR


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Метод removeChild удаляет узел oldChild из списка детей данного узла и возвращает его в качестве результата. Пример:



document.body.removeChild(document.body.firstChild);





Метод replaceChild


Синтаксис:  узел.replaceChild(newChild, oldChild)
Аргументы: newChild, oldChild - выражения типа Node
Результат: узел Node
Исключения: HIERARCHY_REQUEST_ERR, WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR, NOT_FOUND_ERR


Поддержка :Соответствует стандарту.
Соответствует стандарту.



Метод replaceChild заменяет узел oldChild в списке детей данного узла на узел newChild и возвращает oldChild в качестве результата. Если newChild уже был в списке детей, то он удаляется из него до замены. Пример:



var elem = document.createElement("P");
document.body.replaceChild(elem, document.body.firstChild);





Вперед  >>>
 1  2  3 


 8  Комментарии к статье  8 8  Обсудить в чате

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь