Глава 4.3. Узлы дерева документа

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

4.3.1. Абстрактный узел: интерфейс Node

Поддержка: Internet Explorer Поддерживается для XML-документов (XMLDOMNode);
              для HTML-документов поддерживается частично.
           Gecko DOM 1 полностью, DOM 2 частично.

Интерфейс Node соответствует абстрактному узлу дерева XML- или HTML-документа. Все конкретные составляющие документа реализуются интерфейсами, которые являются его потомками. Тип узла задается значением его свойства nodeType в соответствии со следующей таблицей:

Таблица 4.3. Типы узлов DOM
Название Значение Интерфейс Описание
ELEMENT_NODE 1 Element Элемент
ATTRIBUTE_NODE 2 Attr Атрибут
TEXT_NODE 3 Text Текст
CDATA_SECTION_NODE 4 CDATASection Секция CDATA
ENTITY_REFERENCE_NODE 5 EntityReference Ссылка на раздел
ENTITY_NODE 6 Entity Раздел документа
PROCESSING_INSTRUCTION_NODE 7 ProcessingInstruction Директива
COMMENT_NODE 8 Comment Комментарий
DOCUMENT_NODE 9 Document Документ
DOCUMENT_TYPE_NODE 10 DocumentType Тип документа
DOCUMENT_FRAGMENT_NODE 11 DocumentFragment Фрагмент документа
NOTATION_NODE 12 Notation Нотация

Значения свойств узла nodeName, nodeValue и attributes меняются в зависимости от его типа:

Таблица 4.4. Свойства узлов DOM
Интерфейс nodeName nodeValue attributes
Attr Имя атрибута Значение атрибута null
CDATASection #cdata-section Содержимое секции CDATA null
Document #document null null
DocumentFragment #document-fragment null null
DocumentType Имя типа документа null null
Element Тег элемента null NamedNodeMap
Entity Имя раздела null null
EntityReference Имя раздела null null
Notation Имя нотации null null
ProcessingInstruction Имя директивы Содержимое директивы null
Text #text Содержимое текстового узла null

Примечание. Internet Explorer поддерживает только узлы типа Element, Attr и Text. Для остальных типов узлов перечисленные в таблице свойства не определены.

Свойства интерфейса Node
Свойство Изменяемое Модель Описание
attributes Нет DOM 1 Атрибуты узла.
childNodes Нет DOM 1 Список детей.
firstChild Нет DOM 1 Первый ребенок.
lastChild Нет DOM 1 Последний ребенок.
localName Нет DOM 2 Локальное имя в пространстве имен.
namespaceURI Нет DOM 2 URI пространства имен.
nextSibling Нет DOM 1 Следующий узел дерева.
nodeName Нет DOM 1 Имя узла.
nodeType Нет DOM 1 Тип узла.
nodeValue Да DOM 1 Значение узла.
ownerDocument Нет DOM 1 Документ — владелец узла.
parentNode Нет DOM 1 Отец данного узла.
prefix Да DOM 2 Префикс пространства имен.
previousSibling Нет DOM 1 Предыдущий узел дерева.
Методы интерфейса Node
Свойство Модель Описание
appendChild DOM 1 Добавляет сына в конец списка детей.
cloneNode DOM 1 Создает копию данного узла.
hasAttrbutes DOM 2 Проверяет наличие у узла атрибутов.
hasChildNodes DOM 1 Проверяет наличие у узла детей.
insertBefore DOM 1 Вставляет новый узел перед заданным сыном.
isSupported DOM 2 Проверяет свойство реализации DOM.
normalize DOM 1 Нормализует текстовое содержимое узла.
removeChild DOM 1 Удаляет заданного сына.
replaceChild DOM 1 Заменяет заданного сына новым узлом.

Свойство attributes

Синтаксис:  узел.attributes
Изменяемое: нет
Поддержка: Internet Explorer Для XML-документов соответствует стандарту;
              для HTML-документов частично (см. прим.).
           Gecko Соответствует стандарту.

Свойство attributes возвращает объект типа NamedNodeMap, содержащий список всех атрибутов данного узла, если узел имеет тип Element, и null в противном случае.

Примечание. В Internet Explorer это свойство реализовано нестандартно:

  1. Список атрибутов элемента является статическим, а не живым, т. е. изменение атрибутов элемента не влечет его автоматического обновления.
  2. Этот список не содержит атрибута 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
Изменяемое: нет
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Свойство 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
Изменяемое: нет
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Свойство firstChild возвращает указатель на первый узел, являющийся сыном данного узла. Если узел не имеет детей, то возвращается null. Это свойство эквивалентно выражению узел.childNodes[0].

Свойство lastChild

Синтаксис:  узел.lastChild
Изменяемое: нет
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Свойство lastChild возвращает указатель на последний узел, являющийся сыном данного узла. Если узел не имеет детей, то возвращается null. Это свойство эквивалентно выражению узел.childNodes[узел.childNodes.length-1].

Свойство localName

Синтаксис:  узел.localName
Изменяемое: нет
Поддержка: Internet Explorer Не поддерживается.
           Gecko Не поддерживается.

Свойство localName возвращает строку, содержащую локальную часть ограниченного имени узла. Оно имеет смысл только для узлов типа Element и Attr, созданных соответственно методами CreateElementNS и CreateAttributeNS. В остальных случаях возвращается null.

Свойство namespaceURI

Синтаксис:  узел.namespaceURI
Изменяемое: нет
Поддержка: Internet Explorer Только для XML-документов.
           Gecko Не поддерживается.

Свойство namespaceURI возвращает строку, содержащую URI пространства имен данного узла. Оно имеет смысл только для узлов типа Element и Attr, созданных соответственно методами CreateElementNS и CreateAttributeNS. В остальных случаях возвращается null.

Свойство nextSibling

Синтаксис:  узел.nextSibling
Изменяемое: нет
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Свойство nextSibling возвращает указатель на узел, непосредственно следующий в документе за данным узлом. Если такого узла нет, то возвращается null.

Свойство nodeName

Синтаксис:  узел.nodeName
Изменяемое: нет
Поддержка: Internet Explorer Для XML-документов соответствует стандарту;
              для HTML-документов частично (см. прим. к Таблице 4.4).
           Gecko Соответствует стандарту.

Свойство nodeName возвращает строку, содержащую имя данного узла согласно Таблицы 4.4. Пример: оператор alert(document.nodeName) выведет в Gecko строку #document (в Internet Explorer имя узла Document не определено).

Свойство nodeType

Синтаксис:  узел.nodeType
Изменяемое: нет
Поддержка: Internet Explorer Для XML-документов соответствует стандарту;
              для HTML-документов частично (см. прим.).
           Gecko Соответствует стандарту.

Свойство nodeType возвращает тип данного узла согласно Таблицы 4.3.

Примечание. В Internet Explorer это свойство реализовано для узлов Element и Text. Для остальных типов узлов оно не определено.

Пример: оператор alert(document.nodeName) выведет в Gecko строку 9.

Свойство nodeValue

Синтаксис:  узел.nodeValue
Изменяемое: да
Исключения: NO_MODIFICATION_ALLOWED_ERR (при записи), DOMSTRING_SIZE_ERR (при чтении)
Поддержка: Internet Explorer Cоответствует стандарту.
           Gecko Соответствует стандарту.

Свойство nodeValue обеспечивает доступ к значению данного узла. Значение узла зависит от его типа (см. Таблицу 4.4). Если значением узла может быть только null, то попытка изменить его значение игнорируется. Пример:

var text = document.createTextNode("");
text.nodeValue = "Пример абзаца.";
var elem = document.createElement("P");
elem.appendChild(text);
document.body.appendChild(elem);

Свойство ownerDocument

Синтаксис:  узел.ownerDocument
Изменяемое: нет
Поддержка: Internet Explorer Только для XML-документов.
           Gecko Соответствует стандарту.

Свойство ownerDocument возвращает указатель на объект Document, к которому принадлежит данный узел. Для узлов типа Document и DocumentType, которые еще не связаны с конкретным документом, возвращается null. Пример:

var elem = document.createElement("P");
document.body.appendChild(elem);
alert(elem.ownerDocument.documentElement.nodeName);

Свойство parentNode

Синтаксис:  узел.parentNode
Изменяемое: нет
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Свойство parentNode возвращает указатель на узел, являющийся отцом данного узла. Если узел не имеет отца, то возвращается null.

Свойство prefix

Синтаксис:  узел.prefix
Изменяемое: да
Исключения: INVALID_CHARACTER_ERR, NO_MODIFICATION_ALLOWED_ERR, NAMESPACE_ERR
Поддержка: Internet Explorer Только для XML-документов; неизменяемое.
           Gecko Не поддерживается.

Свойство prefix возвращает строку, содержащую префикс пространства имен данного узла. Оно имеет смысл только для узлов типа Element и Attr, созданных соответственно методами CreateElementNS и CreateAttributeNS. В остальных случаях возвращается null.

При записи этого свойства автоматически изменяются свойство узла nodeName, содержащее ограниченное имя узла, а также свойства tagName (если это Element) и name (если это Attr).

Свойство previousSibling

Синтаксис:  узел.previousSibling
Изменяемое: нет
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Свойство previousSibling возвращает указатель на узел, непосредственно предшествующий в документе данному узлу. Если такого узла нет, то возвращается null.

Метод appendChild

Синтаксис:  узел.appendChild(newChild)
Аргументы:  newChild — выражение типа Node
Результат:  узел Node
Исключения: HIERARCHY_REQUEST_ERR, WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Метод appendChild добавляет узел newChild в конец списка детей данного узла и возвращает его в качестве результата. Если узел newChild уже был в списке, то он сначала удаляется, а затем добавляется. Пример: сценарий

var elem = document.createElement("IMG");
document.body.appendChild(elem);
alert(document.body.lastChild.tagName);

выведет на экран текст IMG.

Метод cloneNode

Синтаксис:  узел.cloneNode(deep)
Аргументы:  deep — логическое выражение
Результат:  новый узел Node
Исключения: нет
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Метод cloneNode создает копию данного узла и возвращает ее. Если аргумент deep равен true, то создается копия поддерева документа, начиная с данного узла; если он равен false, то копируется только сам узел (и его атрибуты, если это Element).

Метод hasAttributes

Синтаксис:  узел.hasAttributes()
Результат:  логическое значение
Исключения: нет
Поддержка: Internet Explorer Не поддерживается.
           Gecko Соответствует стандарту.

Метод hasAttributes возвращает true, если узел является элементом и имеет хотя бы один атрибут. В остальных случаях возвращается false. Вызов этого метода эквивалентен выражению (узел.attributes.length != 0).

Метод hasChildNodes

Синтаксис:  узел.hasChildNodes()
Результат:  логическое значение
Исключения: нет
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Метод 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
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Метод 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
Результат:  логическое значение
Исключения: нет
Поддержка: Internet Explorer Не поддерживается.
           Gecko Соответствует стандарту.

Метод 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()
Исключения: нет
Поддержка: Internet Explorer Только для XML-документов.
           Gecko Соответствует стандарту.

Метод 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
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Метод 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
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Метод replaceChild заменяет узел oldChild в списке детей данного узла на узел newChild и возвращает oldChild в качестве результата. Если newChild уже был в списке детей, то он удаляется из него до замены. Пример:

var elem = document.createElement("P");
document.body.replaceChild(elem, document.body.firstChild);

4.3.2. Упорядоченный список узлов: интерфейс NodeList

Поддержка: Internet Explorer Для XML-документов соответствует стандарту (XMLDOMNodeList);
              для HTML-документов поддерживается в виде коллекций.
           Gecko Соответствует стандарту.

Интерфейс NodeList реализует упорядоченные списки узлов, которые возвращаются многими свойствами и методами DOM. Списки узлов в DOM являются живыми, т. е. любое изменение документа влечет автоматическое изменение всех связанных с ним списков.

Этот интерфейс имеет единственное свойство length, возвращающее количество узлов в списке, и единственный метод item, возвращающий элемент списка с заданным номером (элементы списка узлов нумеруются, начиная с нуля).

Свойство length

Синтаксис:  список.length
Изменяемое: нет
Поддержка: Internet Explorer Cоответствует стандарту.
           Gecko Соответствует стандарту.

Свойство length возвращает количество элементов в данном списке. Допустимые индексы элементов списка лежат в диапазоне от 0 до length-1 включительно. Следующий пример выводит на экран количество элементов в дереве документа:

alert(document.getElementsByTagName("*").length); // в Gecko (стандарт)
alert(document.all.length);                       // в Internet Explorer

Метод item

Синтаксис:  список.item(index)
Аргументы:  index — числовое выражение
Результат:  узел Node или null
Исключения: нет
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Метод item возвращает элемент списка узлов с заданным индексом в качестве результата. Если индекс выходит за пределы диапазона элементов списка, то возвращается null. Пример: оператор

alert(document.childNodes.item(0).nodeName);

выведет на экран текст HTML.

JavaScript позволяет нам записать обращение к элементу списка более компактно. Предыдущий оператор может выглядеть так:

alert(document.childNodes[0].nodeName);

Internet Explorer поддерживает еще одну форму обращения к элементу списка, а именно:

alert(document.childNodes(0).nodeName);

Однако, эта форма является нестандартной, и ей лучше не пользоваться.

4.3.3. Неупорядоченный список узлов: интерфейс NamedNodeMap

Поддержка: Internet Explorer Для XML-документов соответствует стандарту (XMLDOMNamedNodeMap);
              для HTML-документов поддерживается в виде коллекций.
           Gecko Соответствует стандарту.

Интерфейс NamedNodeMap реализует неупорядоченные списки узлов, доступ к которым осуществляется по имени узла. Эти списки также являются живыми, т. е. любое изменение документа влечет автоматическое изменение всех связанных с ним списков.

DOM допускает возможность доступа к элементам списка NamedNodeMap по их номеру в списке, но подчеркивает, что эта возможность не означает упорядоченности списка по какому-либо признаку.

Этот интерфейс имеет единственное свойство length, возвращающее количество узлов в списке, и несколько методов, обеспечивающих доступ к элементам списка:

Методы интерфейса NamedNodeMap
Свойство Модель Описание
getNamedItem DOM 1 Возвращает узел с заданным именем.
getNamedItemNS DOM 2 Возвращает узел с заданным именем с учетом пространства имен.
item DOM 1 Возвращает узел с заданным номером.
removeNamedItem DOM 1 Удаляет узел с заданным именем.
removeNamedItemNS DOM 2 Удаляет узел с заданным именем с учетом пространства имен.
setNamedItem DOM 1 Добавляет узел в список.
setNamedItemNS DOM 2 Добавляет узел в список с учетом пространства имен.

Свойство length

Синтаксис:  список.length
Изменяемое: нет
Поддержка: Internet Explorer Cоответствует стандарту.
           Gecko Соответствует стандарту.

Свойство length возвращает количество элементов в данном списке. Допустимые индексы элементов списка лежат в диапазоне от 0 до length-1 включительно. Следующий пример выводит на экран количество атрибутов элемента BODY:

alert(document.body.attributes.length);

Метод getNamedItem

Синтаксис:  список.getNamedItem(name)
Аргументы:  name — выражение типа DOMString
Результат:  узел Node или null
Исключения: нет
Поддержка: Internet Explorer Только для XML-документов.
           Gecko Соответствует стандарту.

Метод getNamedItem возвращает элемент списка узлов с заданным именем name в качестве результата. Если узла с таким именем в списке нет, то возвращается null. Пример:

alert(document.body.attributes.getNamedItem("text").nodeValue);

В Internet Explorer этот пример должен быть записан любым из двух следующих способов:

alert(document.body.attributes["text"].nodeValue);
alert(document.body.attributes("text").nodeValue);

Метод getNamedItemNS

Синтаксис:  список.getNamedItemNS(namespaceURI, localName)
Аргументы:  namespaceURI, localName — выражения типа DOMString
Результат:  узел Node или null
Исключения: нет
Поддержка: Internet Explorer Нестандартная поддержка для XML-документов (см. прим.).
           Gecko Не поддерживается.

Метод getNamedItemNS возвращает элемент списка узлов с заданным именем в качестве результата. Если узла с таким именем в списке нет, то возвращается null. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а localName — локальное имя узла.

Примечание. В Microsoft XML DOM этот метод имеет вид getQualifiedItem(localName, namespaceURI).

Метод item

Синтаксис:  список.item(index)
Аргументы:  index — числовое выражение
Результат:  узел Node или null
Исключения: нет
Поддержка: Internet Explorer Соответствует стандарту.
           Gecko Соответствует стандарту.

Метод item возвращает элемент списка узлов с заданным индексом в качестве результата. Если индекс выходит за пределы диапазона элементов списка, то возвращается null. Пример:

alert(document.body.attributes.item(0).nodeName);

JavaScript позволяет нам записать обращение к элементу списка более компактно. Предыдущий оператор может выглядеть так:

alert(document.attributes[0].nodeName);

Internet Explorer поддерживает еще одну форму обращения к элементу списка, а именно:

alert(document.attributes(0).nodeName);

Однако, эта форма является нестандартной, и ей лучше не пользоваться.

Метод removeNamedItem

Синтаксис:  список.removeNamedItem(name)
Аргументы:  name — выражение типа DOMString
Результат:  узел Node
Исключения: NOT_FOUND_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка: Internet Explorer Только для XML-документов.
           Gecko Соответствует стандарту.

Метод removeNamedItem удаляет элемент списка узлов с заданным именем name и возвращает его в качестве результата. Если удаляемый узел является атрибутом элемента, имеющим значение по умолчанию, то сразу после его удаления он вновь появляется в списке со значением по умолчанию. Пример:

document.body.attributes.removeNamedItem("text");

Метод removeNamedItemNS

Синтаксис:  список.removeNamedItemNS(namespaceURI, localName)
Аргументы:  namespaceURI, localName — выражения типа DOMString
Результат:  узел Node
Исключения: NOT_FOUND_ERR, NO_MODIFICATION_ALLOWED_ERR
Поддержка: Internet Explorer Нестандартная поддержка для XML-документов (см. прим.).
           Gecko Не поддерживается.

Метод removeNamedItemNS удаляет элемент списка узлов с заданным именем и возвращает его в качестве результата. Если удаляемый узел является атрибутом элемента, имеющим значение по умолчанию, то сразу после его удаления он вновь появляется в списке со значением по умолчанию. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться. Аргумент namespaceURI задает URI пространства имен, а localName — локальное имя узла.

Примечание. В Microsoft XML DOM этот метод имеет вид removeQualifiedItem(localName, namespaceURI).

Метод setNamedItem

Синтаксис:  список.setNamedItem(arg)
Аргументы:  arg — выражение типа Node
Результат:  узел Node или null
Исключения: WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR, INUSE_ATTRIBURE_ERR
Поддержка: Internet Explorer Только для XML-документов.
           Gecko Соответствует стандарту.

Метод setNamedItem добавляет элемент arg в данный список узлов. Если узел с таким именем в списке есть, то он заменяется на arg и возвращается в качестве результата. Если узла с таким именем в списке нет, то arg вставляется в список и возвращается null. Пример:

var attr = document.createAttribute("text");
attr.nodeValue = "red";
document.body.attributes.setNamedItem(attr);

Метод setNamedItemNS

Синтаксис:  список.setNamedItemNS(arg)
Аргументы:  arg — выражение типа Node
Результат:  узел Node или null
Исключения: WRONG_DOCUMENT_ERR, NO_MODIFICATION_ALLOWED_ERR, INUSE_ATTRIBURE_ERR
Поддержка: Internet Explorer Не поддерживается.
           Gecko Не поддерживается.

Метод setNamedItemNS добавляет элемент arg в данный список узлов. Если узел с таким именем в списке есть, то он заменяется на arg и возвращается в качестве результата. Если узла с таким именем в списке нет, то arg вставляется в список и возвращается null. Этот метод предназначен для XML-документов и для HTML-документов может не поддерживаться. Он отличается от метода setNamedItem тем, что при вставке узла используются URI его пространства имен, и его локальное имя.