- From: dshepsis <notifications@github.com>
- Date: Sat, 06 Oct 2018 20:28:19 -0700
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/704@github.com>
[`NodeIterator`](https://developer.mozilla.org/en-US/docs/Web/API/NodeIterator) is an interface designed for simple, linear traversal over the DOM using both pre-defined and custom filters. It is a highly useful tool for reading over nodes when more common tools like [`getElementsByTagName`](https://developer.mozilla.org/en-US/docs/Web/API/Element/getElementsByTagName) or [`querySelectorAll`](https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelectorAll) don't apply, such as when reading over text or comment nodes. However, unlike `HTMLCollection`s and a `NodeList`s, **`NodeIterator`s are not iterable**, and so cannot be used in for-of loops, or other places where iterables are expected. Given the name, it's reasonable that the `NodeIterator` interface be updated to make it iterable. A potential polyfill/implementation is given here: ```js if (typeof NodeIterator.prototype[Symbol.iterator] !== 'function') { NodeIterator.prototype[Symbol.iterator] = function* () { while (true) { const next = this.nextNode(); if (next === null) break; yield next; } }; } ``` And an example usage: ```js const root = document.body; const nodeIter = document.createNodeIterator(root, NodeFilter.SHOW_TEXT); for (const text of nodeIter) { /* Perform any operation on all text nodes: */ console.log(text.data); } ``` Adding the same iterator to the similar interface [`TreeWalker`](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker) should also be considered for homogeneity. The current spec for `NodeIterator` can be found [here](https://dom.spec.whatwg.org/#interface-nodeiterator). -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/whatwg/dom/issues/704
Received on Sunday, 7 October 2018 03:28:42 UTC