我正在使用createNodeIterator在我的文档中查找单词。
实际上,我使用的是来自MDN和MSDN的几乎确切的示例代码:
这在Chrome和Firefox中是可以实现的。
不幸的是,Internet 11只是说Exception occurred.,一旦我打电话给iterator.nextNode就停止了


Codepen:https://codepen.io/anon/pen/PKmQEe?editors=1011
代码示例:
var iterator = document.createNodeIterator(document.body, NodeFilter.SHOW_TEXT, {
acceptNode: function acceptNode(node) {
if (node.parentNode.tagName.toLowerCase() === 'span') {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}
}, false);
var nextNode = void 0;
var nodes = [];
while (nextNode = iterator.nextNode()) {
if (nextNode.nodeValue.indexOf('o') > -1) {
nodes.push(nextNode);
}
}
console.log(nodes.length);
nodes.forEach(function (node) {
return node.nodeValue = node.nodeValue.replace('o', 'OO');
});<p>Lorem</p>
<p>Ipsum</p>
<div><div><div><div><p>Etiam ipsum purus, elementum vitae congue id, scelerisque nec lectus. Sed at urna id nulla elementum rhoncus. Praesent aliquet turpis justo, blandit eleifend sem. In purus eros, commodo vel pretium non, blandit non elit. Mauris tristique velit in neque malesuada congue. Suspendisse luctus varius nisi quis dignissim. Proin magna urna, tristique et adipiscing ut, ultrices ut leo.</p></div><span>Dolor</span></div></div></div>
发布于 2017-08-10 09:18:25
正如用createNodeIterator fails in IE9 when acceptNode is specified编写的那样,您不能传递IE9 - IE11的对象,而是直接传递函数:
var iterator = document.createNodeIterator(document.body, NodeFilter.SHOW_TEXT, function acceptNode(node) {
if (node.parentNode.tagName.toLowerCase() === 'span') {
return NodeFilter.FILTER_REJECT;
}
return NodeFilter.FILTER_ACCEPT;
}, false);
var nextNode = void 0;
var nodes = [];
while (nextNode = iterator.nextNode()) {
if (nextNode.nodeValue.indexOf('o') > -1) {
nodes.push(nextNode);
}
}
console.log(nodes.length);
nodes.forEach(function (node) {
return node.nodeValue = node.nodeValue.replace('o', 'OO');
});<p>Lorem</p>
<p>Ipsum</p>
<div><div><div><div><p>Etiam ipsum purus, elementum vitae congue id, scelerisque nec lectus. Sed at urna id nulla elementum rhoncus. Praesent aliquet turpis justo, blandit eleifend sem. In purus eros, commodo vel pretium non, blandit non elit. Mauris tristique velit in neque malesuada congue. Suspendisse luctus varius nisi quis dignissim. Proin magna urna, tristique et adipiscing ut, ultrices ut leo.</p></div><span>Dolor</span></div></div></div>
https://stackoverflow.com/questions/45595349
复制相似问题