Тогда вторым дочерним узлом первого дочернего узла будет элемент
<body>.
В свойстве
nodeType
он содержит значение 1 и в свойстве
nodeName
– значение «BODY».
Однако, обратите внимание, что этот прикладной интерфейс чрезвычайно чувствителен к изменениям в тексте документа. Например, если в этот документ добавить единственный перевод строки между тегами
<html>
и
<head>,
этот символ перевода строки станет первым дочерним узлом (текстовым узлом
Text
) первого дочернего узла, а вторым дочерним узлом станет элемент
<head>,
а не
<body>
.
15.3.2. Документы как деревья элементов
Когда основной интерес представляют сами элементы документа, а не текст в них (и пробельные символы между ними), гораздо удобнее использовать прикладной интерфейс, позволяющий интерпретировать документ как дерево объектов
Element
, игнорируя узлы
Text
и
Comment
, которые также являются частью документа.
Первой частью этого прикладного интерфейса является свойство
children
объектов
Element
. Подобно свойству
childNodes
, его значением является объект
NodeList
. Однако, в отличие от свойства
childNodes
, список
children
содержит только объекты
Element
. Свойство
children
– нестандартное свойство, но оно реализовано во всех текущих броузерах. В IE это свойство было реализовано уже очень давно, и большинство других броузеров последовали его примеру. Последним основным броузером, реализовавшим его, стал Firefox 3.5.
Обратите внимание, что узлы
Text
и
Comment
не имеют дочерних узлов. Это означает, что описанное выше свойство
Node.parentNode
никогда не возвращает узлы типа
Text
или
Comment
. Значением свойства
parentNode
любого объекта
Element
всегда будет другой объект
Element
или корень дерева - объект
Document
или
DocumentFragment
.
Второй частью прикладного интерфейса навигации по элементам документа являются свойства объекта
Element
, аналогичные свойствам доступа к дочерним и братским узлам объекта
Node
:
firstElementChild, lastElementChild
Похожи на свойства
firstChild
и
lastChild
, но возвращают дочерние элементы.
nextElementSibling, previousElementSibling
Похожи на свойства
nextSibling
и
previousSibling
, но возвращают братские элементы.
childElementCount
Количество дочерних элементов. Возвращает то же значение, что и свойство
children.length
.
Эти свойства доступа к дочерним и братским элементам стандартизованы и реализованы во всех текущих броузерах, кроме IE. [37]
37
http://www.w3.org/TR/ElementTraversal.
Поскольку прикладной интерфейс навигации по элементам документа реализован не во всех броузерах, вам может потребоваться определить переносимые функции навигации, как в примере 15.2.
Пример 15.2. Переносимые функции навигации по документу
/**
* Возвращает ссылку на n-го предка элемента е или null, если нет такого предка
* или если этот предок не является элементом Element
* (например, Document или DocumentFragment).
* Если в аргументе n передать 0, функция вернет сам элемент е.
* Если в аргументе n передать 1 (или вообще опустить этот аргумент),
* функция вернет родительский элемент.
* Если в аргументе n передать 2, функция вернет родителя родительского элемента и т. д. */