Description
Introduction
The third parameter filter
in both functions needs to be a function in IE as described here https://stackoverflow.com/questions/45595349/ie9-ie-10-ie11-createnodeiterator-exception-occurred/45609439#45609439
Both Firefox and Chrome support this version as well as the object {acceptNode: (node: Node) => number}
as third parameter.
In IE the fourth parameter entityReferenceExpansion
is required.
A previous solution to document.createNodeIterator
can be seen here #27393
The described solution is to override Document
interface; But TypeScript still complains.
Also NodeIterator.referenceNode
is required in lib.dom.d.ts, but in IE it is always undefined
TypeScript Version: 3.6.2
Search Terms:
createTreeWalker createNodeIterator IE Internet Explorer
Code that fails
const walker = document.createTreeWalker(
wrapperElement,
NodeFilter.SHOW_TEXT,
function filter(node: Node): number {
return NodeFilter.FILTER_ACCEPT;
},
false
);
const nodeIterator = document.createNodeIterator(
wrapperElement,
NodeFilter.SHOW_TEXT,
function filter(node: Node): number {
return NodeFilter.FILTER_ACCEPT;
},
false
);
Workaround
const walker = document.createTreeWalker(
wrapperElement,
NodeFilter.SHOW_TEXT,
function filter(node: Node): number {
return NodeFilter.FILTER_ACCEPT;
} as any,
false
);
function acceptNode(node: Node): number {
return NodeFilter.FILTER_ACCEPT;
}
// "strictBindCallApply": false,
const nodeIterator
= document.createNodeIterator.apply(document, [wrapperElement, NodeFilter.SHOW_ELEMENT, acceptNode, false]) as NodeIterator;
Expected behavior:
lib.dom.d.ts has
createTreeWalker(root: Node, whatToShow: number, filter: (node: Node) => number | null, entityReferenceExpansion: boolean): TreeWalker;
createNodeIterator(root: Node, whatToShow: number, filter: (node: Node) => number | null, entityReferenceExpansion: boolean): NodeIterator;
Actual behavior:
lib.dom.d.ts lacks the function signatures
Related Issues:
#27393