# Interface NodeIterator

public interface NodeIterator
`NodeIterators` are used to step through a set of nodes, e.g. the set of nodes in a `NodeList`, the document subtree governed by a particular `Node`, the results of a query, or any other set of nodes. The set of nodes to be iterated is determined by the implementation of the `NodeIterator`. DOM Level 2 specifies a single `NodeIterator` implementation for document-order traversal of a document subtree. Instances of these `NodeIterators` are created by calling `DocumentTraversal``.createNodeIterator()`.

See also the Document Object Model (DOM) Level 2 Traversal and Range Specification.

Since:
  9, DOM Level 2

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `detach()`
  Detaches the `NodeIterator` from the set which it iterated over, releasing any computational resources and placing the `NodeIterator` in the INVALID state.
  `boolean`
  `getExpandEntityReferences()`
  The value of this flag determines whether the children of entity reference nodes are visible to the `NodeIterator`.
  `NodeFilter`
  `getFilter()`
  The `NodeFilter` used to screen nodes.
  `Node`
  `getRoot()`
  The root node of the `NodeIterator`, as specified when it was created.
  `int`
  `getWhatToShow()`
  This attribute determines which node types are presented via the `NodeIterator`.
  `Node`
  `nextNode()`
  Returns the next node in the set and advances the position of the `NodeIterator` in the set.
  `Node`
  `previousNode()`
  Returns the previous node in the set and moves the position of the `NodeIterator` backwards in the set.

- ## Method Details

  - ### getRoot

    Node getRoot()
    The root node of the `NodeIterator`, as specified when it was created.

  - ### getWhatToShow

    int getWhatToShow()
    This attribute determines which node types are presented via the `NodeIterator`. The available set of constants is defined in the `NodeFilter` interface. Nodes not accepted by `whatToShow` will be skipped, but their children may still be considered. Note that this skip takes precedence over the filter, if any.

  - ### getFilter

    NodeFilter getFilter()
    The `NodeFilter` used to screen nodes.

  - ### getExpandEntityReferences

    boolean getExpandEntityReferences()
    The value of this flag determines whether the children of entity reference nodes are visible to the `NodeIterator`. If false, these children and their descendants will be rejected. Note that this rejection takes precedence over `whatToShow` and the filter. Also note that this is currently the only situation where `NodeIterators` may reject a complete subtree rather than skipping individual nodes.
    To produce a view of the document that has entity references expanded and does not expose the entity reference node itself, use the `whatToShow` flags to hide the entity reference node and set `expandEntityReferences` to true when creating the `NodeIterator`. To produce a view of the document that has entity reference nodes but no entity expansion, use the `whatToShow` flags to show the entity reference node and set `expandEntityReferences` to false.

  - ### nextNode

    Node nextNode() throws DOMException
    Returns the next node in the set and advances the position of the `NodeIterator` in the set. After a `NodeIterator` is created, the first call to `nextNode()` returns the first node in the set.
    Returns:
      The next `Node` in the set being iterated over, or `null` if there are no more members in that set.
    Throws:
      `DOMException` - INVALID_STATE_ERR: Raised if this method is called after the `detach` method was invoked.

  - ### previousNode

    Node previousNode() throws DOMException
    Returns the previous node in the set and moves the position of the `NodeIterator` backwards in the set.
    Returns:
      The previous `Node` in the set being iterated over, or `null` if there are no more members in that set.
    Throws:
      `DOMException` - INVALID_STATE_ERR: Raised if this method is called after the `detach` method was invoked.

  - ### detach

    void detach()
    Detaches the `NodeIterator` from the set which it iterated over, releasing any computational resources and placing the `NodeIterator` in the INVALID state. After `detach` has been invoked, calls to `nextNode` or `previousNode` will raise the exception INVALID_STATE_ERR.