Чтение онлайн

ЖАНРЫ

JavaScript. Подробное руководство, 6-е издание
Шрифт:

nodeType

Тип данного узла. Узлы типа

Document
имеют значение 9 в этом свойстве. Узлы типа
Element
– значение 1. Текстовые узлы типа
Text
– значение 3. Узлы типа
Comments
– значение 8 и узлы типа
DocumentFragment
– значение 11.

nodeValue

Текстовое содержимое узлов

Text
и
Comment
.

nodeName

Имя

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

С помощью этих свойств класса

Node
можно сослаться на второй дочерний узел первого дочернего узла объекта
Document
, как показано ниже:

document.childNodes[0].childNodes[1]

document.firstChild.firstChild.nextSibling

Допустим, что рассматриваемый документ имеет следующий вид:

<html><head><title>Test</title></head><body>Hello World!</body></html>

Тогда вторым дочерним узлом первого дочернего узла будет элемент

<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, функция вернет родителя родительского элемента и т. д. */

function parent(e, n) {

if (n === undefined) n = 1;

while(n-- && e) e = e.parentNode;

if (!e || e.nodeType !== 1) return null;

return e;

}

/**

* Возвращает n-й братский элемент элемента е.

Поделиться с друзьями: