DOM | Интерфейс Node

DOM | Интерфейс Node

IDL

[Exposed=Window]
interface Node : EventTarget {
   const unsigned short ELEMENT_NODE = 1;
   const unsigned short ATTRIBUTE_NODE = 2;
   const unsigned short TEXT_NODE = 3;
   const unsigned short CDATA_SECTION_NODE = 4;
   const unsigned short ENTITY_REFERENCE_NODE = 5; // исторический
   const unsigned short ENTITY_NODE = 6; // исторический
   const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
   const unsigned short COMMENT_NODE = 8;
   const unsigned short DOCUMENT_NODE = 9;
   const unsigned short DOCUMENT_TYPE_NODE = 10;
   const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
   const unsigned short NOTATION_NODE = 12; // исторический
   readonly attribute unsigned short nodeType;
   readonly attribute DOMString nodeName;

   readonly attribute USVString baseURI;

   readonly attribute boolean isConnected;
   readonly attribute Document? ownerDocument;
   Node getRootNode(optional GetRootNodeOptions options = {});
   readonly attribute Node? parentNode;
   readonly attribute Element? parentElement;
   boolean hasChildNodes();
   [SameObject] readonly attribute NodeList childNodes;
   readonly attribute Node? firstChild;
   readonly attribute Node? lastChild;
   readonly attribute Node? previousSibling;
   readonly attribute Node? nextSibling;

   [CEReactions] attribute DOMString? nodeValue;
   [CEReactions] attribute DOMString? textContent;
   [CEReactions] undefined normalize();

   [CEReactions, NewObject] Node cloneNode(optional boolean deep = false);
   boolean isEqualNode(Node? otherNode);
   boolean isSameNode(Node? otherNode); // исторический псевдоним ===

   const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
   const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
   const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
   const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
   const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
   const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
   unsigned short compareDocumentPosition(Node other);
   boolean contains(Node? other);

   DOMString? lookupPrefix(DOMString? namespace);
   DOMString? lookupNamespaceURI(DOMString? prefix);
   boolean isDefaultNamespace(DOMString? namespace);

   [CEReactions] Node insertBefore(Node node, Node? child);
   [CEReactions] Node appendChild(Node node);
   [CEReactions] Node replaceChild(Node node, Node child);
   [CEReactions] Node removeChild(Node child);
};

dictionary GetRootNodeOptions {
   boolean composed = false;
};

 

Примечание! Node — это абстрактный интерфейс и не существует как узел. Он используется всеми узлами (Document, DocumentType, DocumentFragment, Element, Text, ProcessingInstruction и Comment).

 

Каждый узел имеет связанный «документ узла» (node document), установленный при создании, то есть документ.

 

Примечание! Документ узла узла может быть изменен с помощью алгоритма принятия.

 

Алгоритм получения родителя узла при наличии события event, возвращает назначенный слот узла, если узел назначен, и родитель узла в противном случае.

 

Примечание! У каждого узла также есть список зарегистрированных наблюдателей.

 

Для веб-разработчиков (не нормативно)

node . nodeType

Возвращает тип узла node, представленный числом из следующего списка:

Node . ELEMENT_NODE (1)

узел node — это элемент.

Node . TEXT_NODE (3)

узел node — это текстовый узел Text.

Node . CDATA_SECTION_NODE (4)

узел node — это узел CDATASection.

Node . PROCESSING_INSTRUCTION_NODE (7)

узел node — это узел ProcessingInstruction.

Node . COMMENT_NODE (8)

узел node — это узел комментария Comment.

Node . DOCUMENT_NODE (9)

узел node — это документ.

Node . DOCUMENT_TYPE_NODE (10)

узел node — это тип документа.

Node . DOCUMENT_FRAGMENT_NODE (11)

узел node — это узел DocumentFragment.

 

node . nodeName

Возвращает строку, соответствующую типу узла node, как показано ниже:

Element

Его полное имя в верхнем регистре HTML.

Attr

Его полное имя.

Text

«#text».

CDATASection

«#cdata-section».

ProcessingInstruction

Его цель.

Comment

«#comment».

Document

«#document».

DocumentType

Его имя.

DocumentFragment

«#document-fragment».

 

Получатель атрибута nodeType при вызове должен возвращать первый соответствующий оператор, включая этот this:

Element

ELEMENT_NODE (1)

Attr

ATTRIBUTE_NODE (2);

Text

TEXT_NODE (3);

CDATASection

CDATA_SECTION_NODE (4);

ProcessingInstruction

PROCESSING_INSTRUCTION_NODE (7);

Comment

COMMENT_NODE (8);

Document

DOCUMENT_NODE (9);

DocumentType

DOCUMENT_TYPE_NODE (10);

DocumentFragment

DOCUMENT_FRAGMENT_NODE (11).

 

Получатель атрибута nodeName при вызове должен возвращать первый соответствующий оператор, включая этот this:

Element

Его полное имя в верхнем регистре HTML.

Attr

Его полное имя.

Text

«#text».

CDATASection

«#cdata-section».

ProcessingInstruction

Его цель.

Comment

«#comment».

Document

«#document».

DocumentType

Его имя.

DocumentFragment

«#document-fragment».

 

Для веб-разработчиков (не нормативно)

node . baseURI

Возвращает базовый URL документа документа узла node

 

Получатель атрибута baseURI должен возвращать базовый URL документа документа узла, сериализованный.

 

Для веб-разработчиков (не нормативно)

node . isConnected

Возвращает true, если узел node подключен, и false в противном случае.

node . ownerDocument

Возвращает документ узла. Возвращает null для документов.

node . getRootNode()

Возвращает корень узла node.

node . getRootNode({ composed:true })

Возвращает, включающий тень, корень узла node.

node . parentNode

Возвращает родителя.

node . parentElement

Возвращает родительский элемент.

node . hasChildNodes()

Возвращает, есть ли у узла node дети.

node . childNodes

Возвращает детей.

node . firstChild

Возвращает первого ребенка.

node . lastChild

Возвращает последнего ребенка.

node . previousSibling

Возвращает предыдущего родственника.

node . nextSibling

Возвращает следующего родственника.

 

Получатель атрибута isConnected должен возвращать true, если этот this подключен, и false в противном случае.

Получатель атрибута ownerDocument должен возвращать null, если этот this является документом, и в противном случае — документ узла этого this.

 

Примечание! Документ узла документа — это сам этот документ. У всех узлов всегда есть документ узла.

Метод getRootNode(options) при вызове, должен возвращать корень, включающий тень этого this если composed параметров options истинно, и корень этого this в противном случае.

Получатель атрибута parentNode должен возвращать родителя этого this.

Примечание! Узел Attr не имеет родителя.

Получатель атрибута parentElement должен возвращать родительский элемент этого this.

Метод hasChildNodes() при вызове должен возвращать true, если у него (этого this) есть дети, и false в противном случае.

Получатель атрибута childNodes должен возвращать NodeList с корнем только для этого this совпадающих детей.

Получатель атрибута firstChild должен возвращать первого ребёнка этого this.

Получатель атрибута lastChild должен возвращать последнего ребёнка этого this.

Получатель атрибута previousSibling должен возвращать предыдущего родственника этого this.

Примечание! Узел Attr не имеет родственников.

Получатель атрибута nextSibling должен возвращать следующего родственника этого this.

 

В зависимости от этого атрибут nodeValue должен возвращать следующее:

Attr

значение этого this.

Text

ProcessingInstruction

Comment

данные этого this.

Любой другой узел

Null.

 

Атрибут nodeValue должен при установке, если новое значение равно null, действовать так, как если бы это была пустая строка, а затем делать, как описано ниже, в зависимости от этого this:

Attr

Установите существующее значение атрибута с этим this и новым значением.

Text

ProcessingInstruction

Comment

Замените данные узла этого this, смещение 0, посчитайте длину этого this и данные нового значение.

Любой другой узел

Ничего не делать.

 

Получатель атрибута textContent должен возвращать следующее, включая это:

DocumentFragment

Element

Текстовое содержимое потомка этого this.

Attr

значение этого this.

Text

ProcessingInstruction

Comment

данные этого this.

Любой другой узел

Null.

 

Чтобы «заменить все строкой» (string replace all) на строку string в узле parent, выполните следующие действия:

1. Пусть node будет null.
2. Если строка string не является пустой строкой, тогда установите узел node в новый текстовый узел Text, данные которого являются строкой string, а документ узла - это документ узла родителя parent.
3. Замените все на узел node в родителe parent.

 

Установщик атрибута textContent должен, если заданное значение равно null, действовать так, как если бы это была пустая строка, а затем сделать, как описано ниже, включив этот this:

DocumentFragment

Element

Заменить все строкой указанным значением этого this.

Attr

Установите существующее значение атрибута с этим this и новым значением.

Text

ProcessingInstruction

Comment

Замените данные узлом this, смещением 0, посчитайте длину this и передайте заданное значение.

Любой другой узел

Ничего не делать.

 

Для веб-разработчиков (не нормативно)

node . normalize()

Удаляет пустые эксклюзивные текстовые узлы Text и объединяет данные оставшихся смежных эксклюзивных текстовых узлов Text в первый из их узлов.

Метод normalize() при вызове должен выполнять эти шаги для каждого потомка эксклюзивного узла Text узла node этого this:

1. Пусть длина length будет длиной узла node.
2. Если длина length равна нулю, тогда удалите узел node и перейдите к следующему эксклюзивному узлу Text, если таковой имеется.
3. Пусть данные data будут объединением данных смежных эксклюзивных текстовых узлов Text узла node (исключая его самого) в древовидном порядке.
4. Замените данные узлом узла node, длиной смещения length, счетчиком 0 и данными данных data.
5. Пусть currentNode будет следующим родственником узла node.
6. Пока currentNode является эксклюзивным текстовым узлом Text:
   1. Для каждого живого диапазона, начальным узлом которого является currentNode, добавьте длину length к его начальному смещению и установите для его начального узла значение node.
   2. Для каждого активного диапазона, конечным узлом которого является currentNode, добавьте длину length к его конечному смещению и установите для его конечного узла значение node.
   3. Для каждого живого диапазона, чей начальный узел является родителем currentNode, а начальное смещение - индексом currentNode, установите для его начального узла значение node, а его начальное смещение - length.
   4. Для каждого активного диапазона, конечный узел которого является родителем currentNode, а конечное смещение - индексом currentNode, установите его конечный узел равным node, а его конечное смещение равным длине length.
   5. Добавьте длину currentNode к длине length.
   6. Установите currentNode на его следующего родственника.
7. Удалите смежные эксклюзивные текстовые узлы Text узла node (исключая его самого) в порядке дерева.

 

Для веб-разработчиков (не нормативно)

node . cloneNode([deep = false])

Возвращает копию узла node. Если deeptrue, копия также включает потомков узла node.

node . isEqualNode(otherNode)

Возвращает, имеют ли node и otherNode одинаковые свойства.

 

Спецификации могут определять «шаги клонирования» (cloning steps) для всех или некоторых узлов. Алгоритму передается копия copy, узел node, документ document и необязательный флаг клонирования детей (clone children flag), как указано в алгоритме клонирования.

Примечание! HTML определяет шаги клонирования для скриптов script и элементов ввода input. SVG должен делать то же самое со своими элементами скрипта script, но в данный момент не вызывает этого.

 

Чтобы «клонировать» (clone) узел node с дополнительным документом document и флагом клонирования детей (clone children flag), выполните следующие действия:

1. Если документ document не указан, пусть document будет документом узла node.
2. Если узел node является элементом, то:
   1. Пусть копия copy будет результатом создания элемента, заданного документа document, локального имени узла node, пространства имен узла node, префикса пространства имен узла node и значения is узла node, при снятом флаге синхронных настраиваемых элементов (synchronous custom elements flag).
   2. Для каждого атрибута attribute в списке атрибутов узла node:
      1. Пусть copyAttribute будет клоном attribute.
      2. Добавьте атрибут copyAttribute к копии copy.
3. В противном случае пусть copy будет узлом, который реализует те же интерфейсы, что и node, и выполняет эти дополнительные требования, включая узел node:
   Document
      Установите кодировку копии copy, тип контента, URL, источник, тип и режим, как для узла node.
   DocumentType
      Установите имя копии copy, общедоступный идентификатор и идентификатор системы, как для узла node.
   Attr
      Установите пространство имен копии copy, префикс пространства имен, локальное имя и значение как для узла node.
   Text
   Comment
      Установите данные копии copy на данные узла node.
   ProcessingInstruction
      Установите цель копии copy и данные для узла node.
   Любой другой узел
      —
4. Установите документ узла копии copy и document на copy, если copy является документом, и установите документ узла копии copy на document в противном случае.
5. Выполните все шаги клонирования, определенные для узла node в других применимых спецификациях, и передайте копию copy, узел node, документ document и флаг клонирования детей (clone children flag), если он установлен, в качестве параметров.
6. Если установлен флаг клонирования детей (clone children flag), клонируйте всех детей узла node и добавьте их для copy с document как указано и установленным флагом клонирования детей (clone children flag).
7. Вернуть copy

 

При вызове метода cloneNode(deep) необходимо выполнить следующие действия:

1. Если этот this является теневым корнем, выбросить исключение DOMException "NotSupportedError".
2. Верните клон этого this с установленным флагом clone children flag, если deep равен true.

 

Узел A «равен» (equals) узлу B, если выполняются все следующие условия:

Значение атрибута nodeType для A и B идентично.
Следующие значения также равны, в зависимости от A:
   DocumentType
      Его имя, публичный идентификатор и системный идентификатор.
   Element
      Его пространство имен, префикс пространства имен, локальное имя и размер его списка атрибутов.
   Attr
      Его пространство имен, локальное имя и значение.
   ProcessingInstruction
      Его цель и данные.
   Text
   Comment
      Его данные.
   Любой другой узел
      —
Если A является элементом, каждый атрибут в его списке атрибутов имеет атрибут, равный атрибуту в списке атрибутов B.
У A и B одинаковое количество детей.
Каждый ребёнок A равен ребёнку B по тому же индексу.

 

Метод isEqualNode(otherNode) при вызове должен возвращать истину true, если otherNode не равен null, и этот this равен otherNode, и false в противном случае.

Метод isSameNode(otherNode) при вызове должен возвращать true, если otherNode является this, и false в противном случае.

 

Для веб-разработчиков (не нормативно)

node . compareDocumentPosition(other)

Возвращает битовую маску, указывающую положение other относительно узла node. Это биты, которые можно установить:

Node . DOCUMENT_POSITION_DISCONNECTED (1)

Устанавливается, когда узел node и other не находятся в одном дереве.

Node . DOCUMENT_POSITION_PRECEDING (2)

Устанавливается, когда other предшествует узлу node.

Node . DOCUMENT_POSITION_FOLLOWING (4)

Устанавливается, когда other следует за узлом node.

Node . DOCUMENT_POSITION_CONTAINS (8)

Устанавливается, когда other является предком узла node.

Node . DOCUMENT_POSITION_CONTAINED_BY (16, 10 в шестнадцатеричном формате)

Устанавливается, когда other является потомком узла node.

node . contains(other)

Возвращает истину true, если other является инклюзивным потомком узла node, и ложь false в противном случае.

 

Это константы, которые compareDocumentPosition() возвращает в виде маски:

  • DOCUMENT_POSITION_DISCONNECTED (1);
  • DOCUMENT_POSITION_PRECEDING (2);
  • DOCUMENT_POSITION_FOLLOWING (4);
  • DOCUMENT_POSITION_CONTAINS (8);
  • DOCUMENT_POSITION_CONTAINED_BY (16, 10 в шестнадцатеричном формате);
  • DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC (32, 20 в шестнадцатеричном формате).

При вызове метода compareDocumentPosition(other) необходимо выполнить следующие действия:

1. Если этот this является other, вернуть ноль.
2. Пусть node1 будет other, а node2 будет this.
3. Пусть attr1 и attr2 будут null.
4. Если node1 является атрибутом, установите для attr1 значение node1 и node1 для элемента attr1.
5. Если node2 является атрибутом, то:
   1. Установите attr2 на node2 и node2 на элемент attr2.
   2. Если attr1 и node1 не равны NULL, а node2 - node1, то:
      1. Для каждого attr в списке атрибутов node2:
         1. Если attr равно attr1, вернуть результат добавления DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC и DOCUMENT_POSITION_PRECEDING.
         2. Если attr равно attr2, вернуть результат добавления DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC и DOCUMENT_POSITION_FOLLOWING.
6. Если node1 или node2 имеет значение NULL или корень node1 не является корнем node2, тогда верните результат добавления DOCUMENT_POSITION_DISCONNECTED, DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC, и либо DOCUMENT_POSITION_PRECEDING, либо DOCUMENT_POSITION_FOLLOWING вместе с этим ограничением согласовано.
Примечание! Возвращать ли DOCUMENT_POSITION_PRECEDING или DOCUMENT_POSITION_FOLLOWING обычно можно путем сравнения указателей. В реализациях JavaScript можно использовать кешированное значение Math.random().
7. Если node1 является предком node2 и attr1 имеет значение NULL, или node1 является node2, а attr2 не равно NULL, то вернуть результат добавления DOCUMENT_POSITION_CONTAINS в DOCUMENT_POSITION_PRECEDING.
8. Если node1 является потомком node2, а attr2 имеет значение null, или node1 является node2, а attr1 не равно NULL, тогда вернуть результат добавления DOCUMENT_POSITION_CONTAINED_BY в DOCUMENT_POSITION_FOLLOWING.
9. Если node1 предшествует node2, верните DOCUMENT_POSITION_PRECEDING.
Примечание! Из-за способа обработки атрибутов в этом алгоритме это приводит к тому, что атрибуты узла считаются предшествующими его детскими узлами, несмотря на то, что атрибуты не участвуют в дереве.
10. Вернуть DOCUMENT_POSITION_FOLLOWING.

 

Метод contains(other) при вызове должен возвращать true, если other является инклюзивным потомком этого this, и false в противном случае (в том числе, когда other имеет значение null).

 

Чтобы «найти префикс пространства имен» (locate a namespace prefix) для элемента element с помощью пространства имен namespace, выполните следующие действия:

1. Если пространство имен элемента element - это namespace, а его префикс пространства имен не равен null, то вернуть его префикс пространства имен.
2. Если элемент element имеет атрибут с префиксом пространства имен "xmlns", а значением является namespace, то возвращается локальное имя первого такого атрибута элемента element.
3. Если родительский элемент элемента element не равен null, то верните результат выполнения поиска префикса пространства имен для этого элемента, используя пространство имен namespace.
4. Вернуть null

 

Чтобы «найти пространство имен» (locate a namespace) для узла node с помощью префикса prefix, включите узел node:

Element
   1. Если его пространство имен не равно null, а его префикс пространства имен - prefix, то вернуть пространство имен.
   2. Если у него есть атрибут, пространство имен которого является пространством имен XMLNS, префиксом пространства имен является "xmlns", а локальное имя - prefix, или если prefix имеет значение NULL и у него есть атрибут, пространство имен которого является пространством имен XMLNS, префикс пространства имен является null и локальное имя равно "xmlns", то вернет его значение, если это не пустая строка, и null в противном случае.
   3. Если его родительский элемент имеет значение NULL, вернуть значение NULL.
   4. Вернуть результат выполнения поиска пространства имен в его родительском элементе с помощью prefix.
Document
   1. Если его элемент документа равен NULL, вернуть NULL.
   2. Вернуть результат выполнения поиска пространства имен в его элементе документа с помощью prefix.
DocumentType
DocumentFragment
   Вернуть null.
Attr
   1. Если его элемент равен NULL, вернуть NULL.
   2. Вернуть результат выполнения поиска пространства имен на его элементе с помощью prefix.
Любой другой узел
   1. Если его родительский элемент имеет значение NULL, вернуть значение NULL.
   2. Вернуть результат выполнения поиска пространства имен в его родительском элементе с помощью prefix.

 

Метод lookupPrefix(namespace) при вызове должен выполнить следующие шаги:

1. Если пространство имен namespace равно null или пустая строка, верните null.
2. Включите этот this:
   Element
      Вернуть результат поиска префикса пространства имен для него с помощью namespace.
   Document
      Возвращает результат поиска префикса пространства имен для его элемента документа, если его элемент документа не равен null, и null в противном случае.
   DocumentType
   DocumentFragment
      Вернуть null.
   Attr
      Вернуть результат поиска префикса пространства имен для его элемента, если его элемент не равен null, и null в противном случае.
   Любой другой узел
      Вернуть результат поиска префикса пространства имен для его родительского элемента, если его родительский элемент не равен null, и null в противном случае.

 

При вызове метода lookupNamespaceURI(prefix) необходимо выполнить следующие шаги:

1. Если prefix - это пустая строка, установите для нее значение null.
2. Верните результат выполнения поиска пространства имен для этого this с помощью prefix.

 

Метод isDefaultNamespace(namespace) при вызове должен выполнить следующие шаги:

1. Если пространство имен namespace является пустой строкой, установите для него значение null.
2. Пусть defaultNamespace будет результатом выполнения поиска пространства имен для этого this с помощью null.
3. Верните true, если defaultNamespace совпадает с namespace, и false в противном случае.

 

Метод insertBefore(node, child) при вызове должен возвращать результат предварительной вставки узла node в this перед ребёнком child.

Метод appendChild(node) при вызове должен возвращать результат добавления узла к this.

Метод replaceChild(node, child) при вызове должен возвращать результат замены ребёнка child на узел node внутри this.

Метод removeChild(child) при вызове должен возвращать результат предварительного удаления ребёнка child из this.

 

«Список элементов с квалифицированным именем qualifiedName» (list of elements with qualified name qualifiedName) для узла root — это HTMLCollection, возвращаемый следующим алгоритмом:

1. Если qualifiedName равно «*» (U+002A), вернуть HTMLCollection с корнем root, фильтр которого соответствует только элементам потомкам.
2. В противном случае, если документ узла root является документом HTML, вернуть HTMLCollection с корнем root, фильтр которого соответствует следующим элементам потомкам:
Пространство имен которого является пространством имен HTML, а полное имя - qualifiedName в нижнем регистре ASCII.
Пространство имен которого не not является пространством имен HTML, а полное имя - qualifiedName.
3. В противном случае верните HTMLCollection с корнем root, чей фильтр соответствует элементам-потомкам, чье полное имя - qualifiedName.

 

При вызове с тем же аргументом и до тех пор, пока тип документа узла root не изменился, может быть возвращен тот же объект HTMLCollection, который был возвращен предыдущим вызовом.

«Список элементов с пространством имен namespace и локальным именем localName» (list of elements with namespace namespace and local name localName) для узла root — это HTMLCollection, возвращаемая следующим алгоритмом:

1. Если пространство имен namespace является пустой строкой, установите для нее значение null.
2. Если и namespace, и localName равны «*» (U+002A), вернуть HTMLCollection с корнем, чей фильтр соответствует элементам-потомкам.
3. В противном случае, если namespace равно «*» (U+002A), вернуть HTMLCollection с корнем root, фильтр которого соответствует элементам-потомкам, локальное имя которых - localName.
4. В противном случае, если localName равно «*» (U+002A), вернуть HTMLCollection с корнем root, фильтр которого соответствует элементам-потомкам, пространство имен которых является namespace.
5. В противном случае верните HTMLCollection с корнем root, фильтр которого соответствует элементам-потомкам, пространство имен которых - namespace, а локальное имя - localName.

 

При вызове с теми же аргументами может быть возвращен тот же объект HTMLCollection, который был возвращен более ранним вызовом.

«Список элементов с именами классов classNames» (list of elements with class names classNames) для узла root — это HTMLCollection, возвращаемый следующим алгоритмом:

1. Пусть классы classes будут результатом запуска синтаксического анализатора упорядоченного набора на classNames.
2. Если классы classes - это пустой набор, верните пустой HTMLCollection.
3. Вернуть HTMLCollection с корнем root, фильтр которого соответствует элементам-потомкам, все классы которых находятся в classes.
Сравнение классов должно производиться без учета регистра в кодировке ASCII, если режим документа узла root установлен на "quirks" (причуды), и идентичным образом в противном случае.

 

При вызове с тем же аргументом может быть возвращен тот же объект HTMLCollection, который был возвращен предыдущим вызовом.

 

Ссылки

DOM стандарт — https://efim360.ru/dom/

Читайте перевод полной версии стандарта «объектной модели документа», чтобы ознакомиться со всеми концепциями и интерфейсами.

DOMLiving Standardhttps://dom.spec.whatwg.org

Читайте официальную документацию живого стандарта «объектной модели документа», чтобы быть в курсе последних изменений.