Узел
Базовая линия Широко доступна *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
* Некоторые части этой функции могут иметь разную степень поддержки.
Интерфейс DOM Node является абстрактным базовым классом, на основе которого создано множество других объектов API DOM, что позволяет использовать эти типы объектов схожим образом и часто взаимозаменяемо. Как абстрактный класс, нет такого понятия, как обычный Node объект. Все объекты, которые реализуют функциональность Node, основаны на одном из его подклассов. Наиболее заметными являются Document, Element и DocumentFragment.
Кроме того, каждый тип узла DOM представлен интерфейсом, основанным на Node. К ним относятся Attr, CharacterData (на котором основаны Text, Comment, CDATASection и ProcessingInstruction) и DocumentType.
В некоторых случаях конкретная функция базового интерфейса Node может не применяться к одному из его дочерних интерфейсов; в этом случае наследующий узел может возвращать null или генерировать исключение в зависимости от обстоятельств. Например, попытка добавить потомков к типу узла, который не может иметь потомков, вызовет исключение.
Свойства экземпляра
Помимо перечисленных ниже свойств, Node наследует свойства от своего родителя, EventTarget.
-
Node.baseURIТолько для чтения -
Возвращает строку, представляющую базовый URL документа, содержащего
Node. -
Node.childNodesТолько для чтения -
Возвращает живой
NodeList, содержащий всех потомков этого узла (включая элементы, текст и комментарии).NodeListявляется живым, что означает, что если потомкиNodeизменятся, объектNodeListавтоматически обновится. -
Node.firstChildТолько для чтения -
Возвращает
Node, представляющий первый непосредственный дочерний узел узла, илиnullесли у узла нет потомков. -
Node.isConnectedТолько для чтения -
Булево значение, указывающее, подключен ли узел (прямо или косвенно) к объекту контекста, например, к объекту
Documentв случае обычного DOM или к объектуShadowRootв случае тени DOM. -
Node.lastChildТолько для чтения -
Возвращает
Node, представляющий последний непосредственный дочерний узел узла, илиnullесли у узла нет потомков. -
Node.nextSiblingТолько для чтения -
Возвращает
Node, представляющий следующий узел в дереве, илиnullесли такого узла нет. -
Node.nodeNameТолько для чтения -
Возвращает строку, содержащую имя
Node. Структура имени будет отличаться в зависимости от типа узла. Например,HTMLElementбудет содержать имя соответствующего тега, например'AUDIO'дляHTMLAudioElement, узелTextбудет иметь строку'#text', а узелDocument— строку'#document'. -
Node.nodeTypeТолько для чтения -
Возвращает
unsigned short, представляющий тип узла. Возможные значения:Имя Значение ELEMENT_NODE1ATTRIBUTE_NODE2TEXT_NODE3CDATA_SECTION_NODE4PROCESSING_INSTRUCTION_NODE7COMMENT_NODE8DOCUMENT_NODE9DOCUMENT_TYPE_NODE10DOCUMENT_FRAGMENT_NODE11 Node.nodeValue-
Возвращает/устанавливает значение текущего узла.
-
Node.ownerDocumentТолько для чтения -
Возвращает
Document, к которому принадлежит этот узел. Если узел сам является документом, возвращаетnull. -
Node.parentNodeТолько для чтения -
Возвращает
Node, являющийся родителем этого узла. Если такого узла нет, например, если этот узел находится вверху дерева или если он не участвует в дереве, это свойство возвращаетnull. -
Node.parentElementТолько для чтения -
Возвращает
Element, являющийся родителем этого узла. Если узел не имеет родителя или родитель не являетсяElement, это свойство возвращаетnull. -
Node.previousSiblingТолько для чтения -
Возвращает
Node, представляющий предыдущий узел в дереве, илиnullесли такого узла нет. Node.textContent-
Возвращает/устанавливает текстовое содержимое элемента и всех его потомков.
Методы экземпляра
В дополнение к методам ниже, Node наследует методы от своего родителя, EventTarget.
Node.appendChild()-
Добавляет указанный
childNodeаргумент в качестве последнего дочернего элемента текущего узла. Если аргумент ссылался на существующий узел в дереве DOM, узел будет откреплён от своего текущего положения и прикреплён в новом. Node.cloneNode()-
Клонирует
Node, а также, по желанию, все его содержимое. По умолчанию, клонируется содержимое узла. Node.compareDocumentPosition()-
Сравнивает положение текущего узла с другим узлом в любом другом документе.
Node.contains()-
Возвращает значение
trueилиfalse, указывающее, является ли узел потомком вызывающего узла. Node.getRootNode()-
Возвращает корневой объект контекста, который по желанию включает теневой корень, если он доступен.
Node.hasChildNodes()-
Возвращает булево значение, указывающее, имеет ли элемент дочерние узлы.
Node.insertBefore()-
Вставляет
Nodeперед узлом-ссылкой в качестве дочернего элемента указанного родительского узла. Node.isDefaultNamespace()-
Принимает URI пространства имён в качестве аргумента и возвращает булево значение с значением
true, если пространство имён является стандартным для данного узла, илиfalseв противном случае. Node.isEqualNode()-
Возвращает булево значение, которое указывает, являются ли два узла одного типа и все их определяющие данные совпадают.
Node.isSameNode()-
Возвращает булево значение, указывающее, являются ли два узла одинаковыми (то есть, ссылаются ли они на один и тот же объект).
Node.lookupPrefix()-
Возвращает строку, содержащую префикс для заданного URI пространства имён, если он есть, и
nullв противном случае. При наличии нескольких префиксов результат зависит от реализации. Node.lookupNamespaceURI()-
Принимает префикс и возвращает URI пространства имён, связанного с ним в данном узле, если он найден (и
nullесли нет). Передачаnullв качестве префикса вернёт стандартное пространство имён. Node.normalize()-
Очистить все текстовые узлы под этим элементом (объединить смежные, удалить пустые).
Node.removeChild()-
Удаляет дочерний узел из текущего элемента, который должен быть дочерним элементом текущего узла.
Node.replaceChild()-
Заменяет один дочерний
Nodeтекущего узла вторым, переданным в параметре.
Примеры
Удаление всех дочерних элементов, вложенных в узел
Эта функция удаляет каждый первый дочерний элемент элемента, пока они не закончатся.
function removeAllChildren(element) {
while (element.firstChild) {
element.removeChild(element.firstChild);
}
}
Использование этой функции выполняется в одном вызове. Здесь мы очищаем тело документа:
removeAllChildren(document.body);
Альтернативой может быть установка textContent на пустую строку: document.body.textContent = "".
Рекурсивный проход по дочерним узлам
Следующая функция рекурсивно вызывает функцию обратного вызова для каждого узла, содержащегося в корневом узле (включая сам корень):
function eachNode(rootNode, callback) {
if (!callback) {
const nodes = [];
eachNode(rootNode, (node) => {
nodes.push(node);
});
return nodes;
}
if (callback(rootNode) === false) {
return false;
}
if (rootNode.hasChildNodes()) {
for (const node of rootNode.childNodes) {
if (eachNode(node, callback) === false) {
return;
}
}
}
}
Функция рекурсивно вызывает функцию для каждого дочернего узла rootNode (включая сам корень).
Если callback опущено, функция возвращает Array вместо этого, который содержит rootNode и все узлы, содержащиеся в нём.
Если callback указано и возвращает false при вызове, текущий уровень рекурсии прерывается, и функция возобновляет выполнение на последнем уровне родителя. Это можно использовать для прерывания циклов после обнаружения узла (например, при поиске текстового узла, содержащего определённую строку).
Функция имеет два параметра:
rootNode-
Объект
Node, по потомкам которого будет выполнен рекурсивный проход. callbackНеобязательно-
Необязательная функция обратного вызова function, которая получает
Nodeв качестве единственного аргумента. Если опущено,eachNodeвозвращаетArrayвсех узлов, содержащихся вrootNode(включая сам корень).
Следующий пример демонстрирует реальное применение функции eachNode(): поиск текста на веб-странице.
Мы используем функцию-обёртку с именем grep для выполнения поиска:
function grep(parentNode, pattern) {
let matches = [];
let endScan = false;
eachNode(parentNode, (node) => {
if (endScan) {
return false;
}
// Ignore anything which isn't a text node
if (node.nodeType !== Node.TEXT_NODE) {
return;
}
if (typeof pattern === "string" && node.textContent.includes(pattern)) {
matches.push(node);
} else if (pattern.test(node.textContent)) {
if (!pattern.global) {
endScan = true;
matches = node;
} else {
matches.push(node);
}
}
});
return matches;
}
Спецификации
| Спецификация |
|---|
| DOM # interface-node |
Совместимость с браузерами
| Настольный | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | |
Node |
1WebKit и старые версии Blink некорректно не заставляютNode наследовать от EventTarget. |
12 | 1 | 7WebKit и старые версии Blink некорректно не заставляютNode наследовать от EventTarget. |
1WebKit и старые версии Blink некорректно не заставляютNode наследовать от EventTarget. |
18WebKit и старые версии Blink некорректно не заставляютNode наследовать от EventTarget. |
4 | 10.1WebKit и старые версии Blink некорректно не заставляютNode наследовать от EventTarget. |
1WebKit и старые версии Blink некорректно не заставляютNode наследовать от EventTarget. |
1.0WebKit и старые версии Blink некорректно не заставляютNode наследовать от EventTarget. |
≤37 |
appendChild |
1 | 12 | 1 | 7 | 1.1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
baseURI |
1 | 12 | 1 | ≤12.1 | ≤4 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
childNodes |
1 | 12 | 1 | 7 | 1.2 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
cloneNode |
1 | 12 | 1 | 7 | 1.1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
compareDocumentPosition |
2 | 12 | 1 | ≤12.1 | 4 | 18 | 4 | ≤12.1 | 3.2 | 1.0 | ≤37 |
contains |
16 | 12 | 9 | 7 | 1.1 | 18 | 9 | 10.1 | 1 | 1.0 | 4.4 |
firstChild |
1 | 12 | 1 | ≤12.1 | 1 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
getRootNode |
54 | 79 | 53 | 41 | 10.1 | 54 | 53 | 41 | 10.3 | 6.0 | 54 |
hasChildNodes |
1 | 12 | 1 | ≤12.1 | 1 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
insertBefore |
1 | 12 | 1 | 7 | 1.1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
isConnected |
51 | 79 | 49 | 38 | 10 | 51 | 49 | 41 | 10 | 6.0 | 51 |
isDefaultNamespace |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
isEqualNode |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
isSameNode |
1 | 12 | 481–10 | ≤12.1 | 3 | 18 | 484–10 | ≤12.1 | 1 | 1.0 | 4.4 |
lastChild |
1 | 12 | 1 | ≤12.1 | 1 | 18 | 45 | ≤12.1 | 1 | 1.0 | 4.4 |
lookupNamespaceURI |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
lookupPrefix |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
nextSibling |
1 | 12 | 1 | 7 | 1.1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
nodeName |
1 | 12 | 1 | ≤12.1 | 1 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
nodeType |
1 | 12 | 1 | 7 | 1.1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
nodeValue |
1 | 12 | 1 | ≤12.1 | 1 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
normalize |
1 | 12 | 1 | ≤12.1 | 1 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
ownerDocument |
1 | 12 | 91–9Количество узлов типа doctype (то есть узлов, для которыхNode.nodeType равно Node.DOCUMENT_TYPE_NODE или 10) составляет null. |
≤12.1 | 1 | 18 | 94–9Количество узлов типа doctype (то есть узлов, для которыхNode.nodeType равно Node.DOCUMENT_TYPE_NODE или 10) составляет null. |
≤12.1 | 1 | 1.0 | 4.4 |
|---|---|---|---|---|---|---|---|---|---|---|---|
parentElement |
1 | 12 | 9 | 7До Opera 15 данная функция поддерживалась только вElement. |
1.1 | 18 | 9 | 10.1До Opera Android 14 данная функция поддерживалась только вElement. |
1 | 1.0 | 4.4 |
parentNode |
1 | 12 | 1 | 7 | 1.1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
previousSibling |
1 | 12 | 1 | ≤12.1 | 1 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
removeChild |
1 | 12 | 1 | 7 | 1.1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
replaceChild |
1 | 12 | 1 | 7 | 1.1 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
selectstart_event |
1 | 12 | 52 | 15 | 1.3 | 18 | 52 | 14 | Нет | 1.0 | 4.4 |
textContent |
1 | 12 | 1 | 9 | 3 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Node