В 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).