Интерфейсы NodeList и NamedNodeMap

В DOM также определен интерфейс NodeList для обработки упорядоченных списков узлов (например, дочерних узлов какого-либо узла). Для этого интерфейса определены свойство length (только для чтения), значением которого является количество узлов в списке и метод item(индекс), возвращающий объект типа Node с заданным индексом (индексация узлов начинается с нуля). К узлам списка NodeList, которые являются объектами типа Node, можно также обращаться как к элементам массива.

Свойство childNodes интерфейса Node является объектом типа NodeList.

В разных Web-браузерах количество узлов для одних и тех же дочерних элементов отличается. Так, в Internet Explorer значение свойства length для свойства childNodes элемента body будет равно 3 для примера 4.5.1, т.е. элемент body содержит три дочерних узла с именами #comment, P и IMG. В остальных Web-браузерах (Firefox, Opera и Safari) перед каждым узлом (включая первый узел) вставляется текстовый узел с именем #text, содержащий символ перехода на новую строку "\n", т.е. элемент body для примера 4.5.1 содержит шесть дочерних узла с именами #text, #comment, #text, P, #text и IMG.

 

Для неупорядоченных списков узлов (например, атрибутов элемента) определен интерфейс NamedNodeMap, также содержащий свойство length (только для чтения), значением которого является количество узлов в списке, и следующие методы:

· getNamedItem(имя)– возвращает атрибут (объект типа Node) с указанным именем;

· setNamedItem(имя)– добавляет атрибут (объект типа Node) с указанным именем и возвращает добавляемый объект;

· removeNamedItem(имя)– удаляет атрибут с указанным именем и возвращает удаляемый объект типа Node;

· item(индекс)– возвращает атрибут (объект типа Node) с указанным индексом (индексация узлов начинается с нуля).

К узлам списка NamedNodeMap, которые являются объектами типа Node, можно также обращаться как к элементам массива.

Свойство attributes интерфейса Node является объектом типа NamedNodeMap.

При получении элементов списка NamedNodeMap с помощью метода item(индекс)следует иметь в виду, что количество узлов в списке attributes в разных Web-браузерах разное. Так, в Internet Explorer значение свойства length для свойства attributes узла p с id="p1" будет равно 83, поскольку свойство attributes содержит все возможные атрибута узла. В остальных Web-браузерах (Firefox, Opera и Safari) значение свойства length для свойства attributes этого же узла будет равно 2, т.е. свойство содержит только заданные атрибуты id и name.

 

Пример 4.5.3. Просмотр и изменение атрибутов узлов документа HTML в примере 4.5.1:

1. Значением свойства attributes узла p с id="p1" в примере 4.5.1 будет список узлов атрибутов. Получить узел для атрибута id можно с помощью метода

getNamedItem("id").

Этот узел имеет имя id, тип 2 и значение "p1".

Изменить значение атрибута в узле p с id="p1" можно с помощью свойства nodeValue интерфейса Node.

2. Добавить узел атрибута (например, для атрибута align) для узла p с id="p1" можно с помощью метода

setNamedItem("align").

Значение атрибута для нового узла задается с помощью свойства nodeValue интерфейса Node.

3. Удалить атрибут (например, атрибут name) в узле p с id="p1" можно с помощью метода

removeNamedItem("name").

Обычно для операций с атрибутами используются не приведенные выше методы, а методы интерфейса Element (см. 4.5.3.8).