В этой главе мы рассматриваем базовый тип узлов дерева документа и списки, образованные такими узлами.
Абстрактный узел: интерфейс Node
Поддержка : |  | Поддерживается для XML-документов (XMLDOMNode); для HTML-документов поддерживается частично. | |  | DOM 1 полностью, DOM 2 частично. |
Интерфейс Node соответствует абстрактному узлу дерева XML- или HTML-документа. Все конкретные составляющие документа реализуются интерфейсами, которые являются его потомками. Тип узла задается значением его свойства nodeType в соответствии со следующей таблицей:
Значения свойств узла nodeName, nodeValue и attributes меняются в зависимости от его типа:
Примечание. Internet Explorer поддерживает только узлы типа Element, Attr и Text. Для остальных типов узлов перечисленные в таблице свойства не определены.
Свойство attributes
Синтаксис: узел.attributes Изменяемое: нет
Поддержка : |  | Для XML-документов соответствует стандарту; для HTML-документов частично (см. прим.). | |  | Соответствует стандарту. |
Свойство attributes возвращает объект типа NamedNodeMap, содержащий список всех атрибутов данного узла, если узел имеет тип Element, и null в противном случае.
Примечание. В Internet Explorer это свойство реализовано нестандартно:
- Список атрибутов элемента является статическим, а не живым, т. е. изменение атрибутов элемента не влечет его автоматического обновления.
- Этот список не содержит атрибута 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
| |