获取 DOM 深层次的评论节点
Get comment nodes in DOM deep level
如何获得包含 DOM 中所有评论元素的数组或类数组(JQuery 对象)?
JQuery contents()
仅检索 1 级元素。
更广泛的问题:我需要删除 DOM 中 2 个文本评论之间的所有元素。注释也可以在子元素中。
...html code...
<!--remove from here-->
...code...
<!--finish removing-->
...html code...
所以在方法之后,HTML DOM 应该看起来像:
...html code...
...html code...
谢谢。
您可以使用 TreeWalker 并将 whatToShow
设置为 NodeFilter.SHOW_ALL
以查看文档中的所有节点。
var treeWalker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_ALL,
null,
false
);
var commentList = [];
while (treeWalker.nextNode()){
// keep only comments
if (treeWalker.currentNode.nodeType === 8)
commentList.push(treeWalker.currentNode);
}
var node;
while (node !== commentList[1]) {
node = commentList[0].nextSibling;
node.parentElement.removeChild(node);
}
<!--Folowing element will be deleted-->
<span> Hello world</span>
<!-- the next one should be kept -->
<span> keep me !</span>
如何获得包含 DOM 中所有评论元素的数组或类数组(JQuery 对象)?
JQuery contents()
仅检索 1 级元素。
更广泛的问题:我需要删除 DOM 中 2 个文本评论之间的所有元素。注释也可以在子元素中。
...html code...
<!--remove from here-->
...code...
<!--finish removing-->
...html code...
所以在方法之后,HTML DOM 应该看起来像:
...html code...
...html code...
谢谢。
您可以使用 TreeWalker 并将 whatToShow
设置为 NodeFilter.SHOW_ALL
以查看文档中的所有节点。
var treeWalker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_ALL,
null,
false
);
var commentList = [];
while (treeWalker.nextNode()){
// keep only comments
if (treeWalker.currentNode.nodeType === 8)
commentList.push(treeWalker.currentNode);
}
var node;
while (node !== commentList[1]) {
node = commentList[0].nextSibling;
node.parentElement.removeChild(node);
}
<!--Folowing element will be deleted-->
<span> Hello world</span>
<!-- the next one should be kept -->
<span> keep me !</span>