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

IDL

[Exposed=Window]
interface NodeIterator {
   [SameObject] readonly attribute Node root;
   readonly attribute Node referenceNode;
   readonly attribute boolean pointerBeforeReferenceNode;
   readonly attribute unsigned long whatToShow;
   readonly attribute NodeFilter? filter;

   Node? nextNode();
   Node? previousNode();

   undefined detach();
};

Примечание!

Объекты NodeIterator могут быть созданы с помощью метода createNodeIterator() для объектов Document.

Каждый объект NodeIterator имеет связанную «коллекцию итераторов» (iterator collection), которая является коллекцией в корне объекта NodeIterator, чей фильтр соответствует любому узлу.

Каждый объект NodeIterator также имеет связанную «ссылку» (reference) (узел) и «указатель перед ссылкой» (pointer before reference) (логическое значение).

Примечание!

Как упоминалось ранее, у объектов NodeIterator есть связанный активный флаг, корень, whatToShow и фильтр.

«Шаги предварительного удаления» (pre-removing steps) NodeIterator, заданные для nodeIterator и toBeRemovedNode, следующие:

1. Если toBeRemovedNode не является инклюзивным предком ссылки nodeIterator или toBeRemovedNode является корнем nodeIterator, тогда вернитесь.
2. Если nodeIterator указатель перед ссылкой истинен, то:
   1. Пусть next будет первым последующим узлом toBeRemovedNode, который является инклюзивным потомком корня nodeIterator и не является инклюзивным потомком toBeRemovedNode, и null, если такого узла нет.
   2. Если next не равно null, то установите ссылку nodeIterator на next и вернитесь.
   3. В противном случае установите указатель перед ссылкой nodeIterator на false.

Примечание!

Шаги здесь не заканчиваются.

3. Установите ссылку nodeIterator на родителя toBeRemovedNode, если предыдущий родственник toBeRemovedNode равен null, и инклюзивный потомок из предыдущего родственника toBeRemovedNode, который в противном случае появляется последним в порядке дерева.

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

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

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

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

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

Чтобы «обойти» (to traverse), учитывая итератор iterator объекта NodeIterator и направление direction, выполните следующие действия:

1. Пусть node будет ссылкой на iterator.
2. Пусть beforeNode будет указателем перед ссылкой итератора iterator.
3. Пока истина:
   1. Ответвление по направлению direction:

   Следующий

      Если beforeNode имеет значение false, тогда установите node на первый узел, следующий за node в коллекции итератора iterator. Если такого узла нет, верните null.
      Если beforeNode истинно true, установите его на ложь false.

   Предыдущий

      Если beforeNode истинно true, тогда установите node на первый узел, предшествующий до node в коллекции итератора iterator. Если такого узла нет, верните null.
      Если beforeNode имеет значение false, установите его в значение true.

   2. Пусть result будет результатом фильтрации узла node в итераторе iterator.
   3. Если result FILTER_ACCEPT, то прервать.
4. Установить ссылку итератора iterator на узел node.
5. Установите указатель перед ссылкой итератора iterator на beforeNode.
6. Вернуть node

Метод nextNode() при вызове должен возвращать результат обхода c this и следующего.

Метод previousNode() при вызове должен возвращать результат обхода с this и предыдущего.

Метод detach() при вызове ничего не должен делать.

Примечание!

Его функциональность (отключение объекта NodeIterator) была удалена, но сам метод сохранен для совместимости.

 

Ссылки

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

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

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

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

Поделись записью