NodeIterator
============

The **`NodeIterator`** interface represents an iterator to traverse nodes of a DOM subtree in document order.

Syntax
------

A `NodeIterator` can be created using the `Document.createNodeIterator()` method, as follows:


```js
const nodeIterator = document.createNodeIterator(root, whatToShow, filter);
```

Instance properties
-------------------

*This interface doesn't inherit any property.*

`NodeIterator.root` Read only 

 Returns a `Node` representing the root node, as specified when the
 `NodeIterator` was created.


`NodeIterator.whatToShow` Read only 

 Returns an `unsigned long` bitmask that describes the types of `Node`
 to be matched. Non-matching nodes are skipped, but relevant child nodes may be included.


The possible bitmask values are constants from the `NodeFilter` interface:

| Constant | Numerical value | Description |
| --- | --- | --- |
| `NodeFilter.SHOW_ALL` | `4294967295` (that is the max value of `unsigned long`) | Shows all nodes. |
| `NodeFilter.SHOW_ATTRIBUTE` 
Deprecated
 | `2` | Shows attribute `Attr` nodes. This is meaningful only when creating a `NodeIterator` with an `Attr` node as its root; in this case, it means that the attribute node will appear in the first position of the iteration or traversal. Since attributes are never children of other nodes, they do not appear when traversing over the document tree. |
| `NodeFilter.SHOW_CDATA_SECTION` 
Deprecated
 | `8` | Shows `CDATASection` nodes. |
| `NodeFilter.SHOW_COMMENT` | `128` | Shows `Comment` nodes. |
| `NodeFilter.SHOW_DOCUMENT` | `256` | Shows `Document` nodes. |
| `NodeFilter.SHOW_DOCUMENT_FRAGMENT` | `1024` | Shows `DocumentFragment` nodes. |
| `NodeFilter.SHOW_DOCUMENT_TYPE` | `512` | Shows `DocumentType` nodes. |
| `NodeFilter.SHOW_ELEMENT` | `1` | Shows `Element` nodes. |
| `NodeFilter.SHOW_ENTITY` 
Deprecated
 | `32` | Legacy, no longer used. |
| `NodeFilter.SHOW_ENTITY_REFERENCE` 
Deprecated
 | `16` | Legacy, no longer used. |
| `NodeFilter.SHOW_NOTATION` 
Deprecated
 | `2048` | Legacy, no longer used. |
| `NodeFilter.SHOW_PROCESSING_INSTRUCTION` | `64` | Shows `ProcessingInstruction` nodes. |
| `NodeFilter.SHOW_TEXT` | `4` | Shows `Text` nodes. |

`NodeIterator.filter` Read only 

Returns a `NodeFilter` used to select the relevant nodes.

`NodeIterator.referenceNode` Read only 

Experimental

Returns the `Node` to which the iterator is anchored.

`NodeIterator.pointerBeforeReferenceNode` Read only 

Returns a boolean indicating whether or not the `NodeIterator` is anchored *before* the `NodeIterator.referenceNode`. If `false`, it indicates that the iterator is anchored *after* the reference node.

Instance methods
----------------

*This interface doesn't inherit any method.*

`NodeIterator.detach()` 
Deprecated

 This is a legacy method, and no longer has any effect. Previously it served to mark a
 `NodeIterator` as disposed, so it could be reclaimed by garbage collection.


`NodeIterator.previousNode()`

Returns the previous `Node` in the document, or `null` if there are none.

`NodeIterator.nextNode()`

Returns the next `Node` in the document, or `null` if there are none.

Specifications
--------------

| Specification |
| --- |
| DOM Standard # interface-nodeiterator |

Browser compatibility
---------------------

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

See also
--------

* The creator method: `Document.createNodeIterator()`.
* Related interface: `TreeWalker`