Node
====

**`Node`** это интерфейс, от которого наследуют несколько типов DOM, он так же позволяет различным типам быть обработанными(или протестированными).

Следующие интерфейсы полностью наследуют от `Node` его методы и свойства: `Document`, `Element`, `CharacterData` (which `Text`, `Comment`, и `CDATASection` inherit), `ProcessingInstruction` (en-US), `DocumentFragment`, `DocumentType` (en-US), `Notation`, `Entity`, `EntityReference`

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

Свойства
--------

*Наследует свойства от родителей `EventTarget`*.[1]

`Node.baseURI` Только для чтения 

Возвращает `DOMString` показывающие основной URL. Понятие основного URL изменяется из одного языка в другой; В HTML, это соответствует протоколу , доменному имени и структуре каталогов, все до последнего `'/'`.

`Node.baseURIObject` (en-US) 
Non-standard

(Не доступно для веб-контента.) Только для чтения. Объект `nsIURI`, представляющий базовый URI элемента.

`Node.childNodes` Только для чтения 

Возвращает живой `NodeList`, содержащий всех потомков данного узла. Живой `NodeList` означает то, что если потомки `узла` изменяются, объект `NodeList` автоматически обновляется.

`Node.firstChild` Только для чтения 

Возвращает `Node`, представляющий первый прямой узел потомок узла или `null,` если узел не имеет потомков.

`Node.lastChild` Только для чтения 

Возвращает `Node`, представляющий последний прямой узел потомок узла или `null`, если узел не имеет потомков.

`Node.localName`Только для чтения 

Возвращает `DOMString` представляющий локальную часть условного имени элемента. В Firefox 3.5 и более ранних версиях, свойство локального имени в верхнем регистре для HTML-элементов (но не XHTML элементов). В более поздних версиях, такого не произошло, и свойство находится в нижнем регистре для HTML и XHTML. Хотя недавние спецификации требуют от `localName` быть определённым как интерфейс `Element`, но браузеры основанные на Gecko все ещё реализуют его как интерфейс `Node`.

`Node.namespaceURI`Только для чтения 

 Пространство имён URI данного узла или `null,` если нет пространства имён. В Firefox 3.5 и более ранних версиях, HTML-элементы не имеют пространства имён. В более поздних версиях, HTML-элементы находятся в пространстве имён `http://www.w3.org/1999/xhtml` для деревьев HTML и XML.
 Хотя недавние спецификации требуют `namespaceURI` быть определённым как интерфейс `Element`, но браузеры основанные на Gecko все ещё реализуют его как интерфейс `Node`.


`Node.nextSibling` Только для чтения 

Возвращает `Node` представляющий следующий узел в древе или `null,` если не такого узла.

`Node.nodeName` Только для чтения 

Возвращает `DOMString` содержащий имя `узла`. Структура имени будет отличаться от типа имени. Например, `HTMLElement` будет содержать имя соответствующего тега: `'audio'` для `HTMLAudioElement`, узел `Text` будет строкой `'#text'` или узел `Document` будет строкой `'#document'`.

`Node.nodePrincipal` (en-US) 
Non-standard

`nsIPrincipal` представляет основной узел.

`Node.nodeType`Только для чтения 

Возвращает беззнаковое короткое число `(unsigned short`) представляющее тип узла. Возможные значения:

| Имя | Значение |
| --- | --- |
| `ELEMENT_NODE` | `1` |
| `ATTRIBUTE_NODE` 
Устарело
 | `2` |
| `TEXT_NODE` | `3` |
| `CDATA_SECTION_NODE` 
Устарело
 | `4` |
| `ENTITY_REFERENCE_NODE` 
Устарело
 | `5` |
| `ENTITY_NODE` 
Устарело
 | `6` |
| `PROCESSING_INSTRUCTION_NODE` | `7` |
| `COMMENT_NODE` | `8` |
| `DOCUMENT_NODE` | `9` |
| `DOCUMENT_TYPE_NODE` | `10` |
| `DOCUMENT_FRAGMENT_NODE` | `11` |
| `NOTATION_NODE` 
Устарело
 | `12` |

`Node.nodeValue`

Это `DOMString`, представляющее значение объектов. Для большинства типов `Node`, возвращает `null` и любой набор операция игнорируется. Для узлов типа `TEXT_NODE` (`Text` objects), `COMMENT_NODE` (`Comment` objects), и `PROCESSING_INSTRUCTION_NODE` (`ProcessingInstruction` (en-US) objects), значение соответствует текстовым данным, содержащихся в объекте.

`Node.ownerDocument` Только для чтения 

Возвращает `Document` к которому принадлежит этот узел. Если нет связанного с ним документа, возвращает `null`.

`Node.parentNode` Только для чтения 

Возвращает `Node` который является родителем этого узла. Если нет такого узла, по причине того, что узел находится вверху древа или не относится к древу, данное свойство вернёт `null`.

`Node.parentElement` Только для чтения 

Возвращает `Element` который является родителем данного узла. Если узел не имеет родителя или если родитель не `Element`, это свойство вернёт `null`.

`Node.prefix`Только для чтения 

`DOMString` представляющий префикс пространства имён узла или `null` если нет префикса точно определённого.
 Хотя недавние спецификации требуют того, чтобы `префикс` был определён как интерфейс `Element`, браузеры основанные на Gecko ещё реализовывают его как интерфейс `Node`.


`Node.previousSibling` Только для чтения 

Возвращают `Node` представляющий предыдущий узел древа или `null`, если нет такого узла.

`Node.textContent`

Это `DOMString` представляющее текстовый контент элемента и всех его потомков.

Методы
------

*Наследует методы от своих родителей `EventTarget`*.[1]

`Node.appendChild()`

Вставляет `Node` как последний дочерний узел данного элемента.

`Node.cloneNode()`

Клонирует `Node`, и опционально, все его компоненты. По умолчанию, оно клонирует содержимое узла.

`Node.compareDocumentPosition()`

…

`Node.contains()`

…

`Node.getFeature()`

...

`Node.getUserData()`

Позволяет пользователю получить некоторый `DOMUserData` от узла.

`Node.hasAttributes()`

Возвращает `Boolean` (en-US) показывающий, есть ли у элемента какие-либо атрибуты или нет.

`Node.hasChildNodes()`

Возвращает `Boolean` (en-US) показывающий, есть ли у элемента дочерние узлы или нет.

`Node.insertBefore()`

Вставляет первым `Node` данный в качестве параметра, непосредственно перед вторым, потомком данного элемента `Node`.

`Node.isDefaultNamespace()`

…

`Node.isEqualNode()`

…

`Node.isSameNode()`

…

`Node.lookupPrefix()`

…

`Node.lookupNamespaceURI()`

…

`Node.normalize()`

Очищает все текстовые узлы под этим элементом (поглотить смежный, удалить пустой).

`Node.removeChild()`

Удаляет дочерний узел из текущего элемента, который должен быть потомком текущего узла.

`Node.replaceChild()`

Заменяет одного потомка `Node` из существующего на второй указанный в параметре.

`Node.setUserData()`

Позволяет пользователю присоединить или удалить `DOMUserData` к узлу.

Примеры
-------

### Просмотреть все дочерние узлы

Следующая функция рекурсивный цикл всех дочерних узлов узла и она исполняет вызов функции относительно их (и себя относительно родительского узла).


```js
function DOMComb(oParent, oCallback) {
  if (oParent.hasChildNodes()) {
    for (var oNode = oParent.firstChild; oNode; oNode = oNode.nextSibling) {
      DOMComb(oNode, oCallback);
    }
  }
  oCallback.call(oParent);
}
```


#### Синтаксис
```

DOMComb(parentNode, callbackFunction);
```


#### Описание

Рекурсивный цикл всех дочерних узлов `parentNode` и самого `parentNode`, выполняет `callbackFunction` относительно их как `эти` (en-US) объекты.

#### Параметры

`parentNode`

Родительский узел (`Node Object`).

`callbackFunction`

Колбэк-функции (`Function` (en-US)).

#### Пример использования

Следующий пример отправляет в `console.log` текстовое содержимое body:


```js
function printContent() {
  if (this.nodeValue) {
    console.log(this.nodeValue);
  }
}

onload = function () {
  DOMComb(document.body, printContent);
};
```

### Удалить все потомки, вложенные в узел


```js
Element.prototype.removeAll = function () {
  while (this.firstChild) {
    this.removeChild(this.firstChild);
  }
  return this;
};
```


#### Пример использования


```js
/\* ... как альтернатива document.body.innerHTML = "" ... \*/
document.body.removeAll();
```

Спецификации
------------

| Specification |
| --- |
| DOM Standard # interface-node |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.