JavaScript NodeIterator filter Property

Beginner
5 min read
Updated: Nov 2026
3 examples
Property

Definition

NodeIterator.filter is a read-only property that returns the NodeFilter used to screen nodes — the same object (or callback) you passed as the third argument to createNodeIterator() (see MDN).

Read the notes below before you rely on this property. Prefer feature detection when support is limited.

Syntax

Use iterator.filter. Start with this line.

JavaScript
iterator.filter
CallWhat it does
iterator.filterPrimary signature.

Built into the browser. Read iterator.filter on a NodeIterator — no import required.

Library declarations
JavaScript
iterator.filter

Parameters

ParameterDescription
filter at createOptional. Custom screening; omit → usually null
acceptNode(node)Required. Returns FILTER_ACCEPT or reject/skip

Return Value

Return ValueDescription
*NodeFilter or null

JavaScript Examples

Example 1 — Read filter After Creation

MDN idea: pass a filter object, then read it back from the iterator.

JavaScript
const nodeIterator = document.createNodeIterator(
  document.body,
  NodeFilter.SHOW_ELEMENT,
  {
    acceptNode(node) {
      return NodeFilter.FILTER_ACCEPT;
    },
  },
);

const nodeFilter = nodeIterator.filter;
console.log(typeof nodeFilter.acceptNode); // "function"
Try It Yourself

How It Works

  1. Create with a filter. Third argument is an object with acceptNode.
  2. Read the property. nodeIterator.filter is that screening object (MDN).
  3. Check the method. typeof …acceptNode is "function".
  4. Accept-all rule. This filter returns FILTER_ACCEPT for every candidate.

Example 2 — Accept Only <p> Elements

MDN-style filter: keep paragraphs, reject other elements.

JavaScript
const root = document.getElementById("demo");
const iterator = document.createNodeIterator(
  root,
  NodeFilter.SHOW_ELEMENT,
  {
    acceptNode(node) {
      return node.nodeName.toLowerCase() === "p"
        ? NodeFilter.FILTER_ACCEPT
        : NodeFilter.FILTER_REJECT;
    },
  },
);

const pars = [];
let node;
while ((node = iterator.nextNode())) {
  pars.push(node.textContent);
}
console.log(pars); // ["First paragraph", "Second paragraph"]
Try It Yourself

How It Works

  1. Limit to elements. SHOW_ELEMENT ignores text/comment nodes.
  2. Screen with acceptNode. Only <p> returns FILTER_ACCEPT.
  3. Walk with nextNode. Divs and other tags are skipped.
  4. Collect text. Each accepted paragraph’s textContent is stored.

Example 3 — Call filter.acceptNode() Directly

Test the filter on one node without walking the whole tree.

JavaScript
const iterator = document.createNodeIterator(
  document.body,
  NodeFilter.SHOW_ELEMENT,
  {
    acceptNode(node) {
      return node.nodeName === "H1"
        ? NodeFilter.FILTER_ACCEPT
        : NodeFilter.FILTER_REJECT;
    },
  },
);

const target = document.querySelector("h1");
const result = iterator.filter.acceptNode(target);
console.log(result === NodeFilter.FILTER_ACCEPT); // true
Try It Yourself

How It Works

  1. Build a selective filter. Only H1 nodes are accepted.
  2. Grab one target. querySelector("h1") finds a heading.
  3. Call acceptNode yourself. Same method the iterator uses during walks.
  4. Compare the constant. Result equals FILTER_ACCEPT for that h1.

Browser Support

NodeIterator.filter is Baseline Widely available (MDN: across browsers since July 2015). Safe to use without a polyfill in modern teaching and production code.

✓ Baseline · Widely available

NodeIterator.filter

Read-only NodeFilter used to screen nodes during createNodeIterator walks. Available in all major browsers.

98% Widely available
Google Chrome All versions · Desktop & Mobile
Full support
Mozilla Firefox All versions · Desktop & Mobile
Full support
Apple Safari All versions · macOS & iOS
Full support
Microsoft Edge All versions · Chromium & Legacy
Full support
Internet Explorer IE 6+ · Legacy environments
Full support
Opera All modern versions
Full support
NodeIterator.filter Excellent

Bottom line: Use freely in modern apps. Prefer querySelectorAll for simple CSS matches; use filter when you need document-order walks with custom accept/reject logic.

Frequently Asked Questions

A read-only NodeFilter — the same filter passed as the third argument to document.createNodeIterator(). It exposes acceptNode(node) to screen nodes during traversal. If you omitted the filter, filter is usually null.
No. MDN marks NodeIterator.filter as Baseline Widely available (since July 2015). It is not Deprecated, Experimental, or Non-standard.
No. filter is read-only. Create a new NodeIterator with a different filter if you need different screening rules.
Return NodeFilter.FILTER_ACCEPT to include a node, or NodeFilter.FILTER_REJECT / FILTER_SKIP to leave it out. For NodeIterator, FILTER_REJECT and FILTER_SKIP are equivalent (MDN).
whatToShow is a bitmask of node types (elements, text, etc.). filter is a custom acceptNode callback for finer control — for example only paragraphs with a certain class.
Use querySelectorAll for simple CSS matches. Use createNodeIterator with a filter when you need document-order walks with custom accept/reject logic.

Next: pointerBeforeReferenceNode

Learn whether the iterator pointer sits before or after the reference node.

pointerBeforeReferenceNode →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

9 people found this page helpful