Ric*_*omi 9 html javascript dom
我有一个带有调试注释的文档,如下所示:
<!--SERVER_TRACE {...}-->
Run Code Online (Sandbox Code Playgroud)
有没有办法查询DOM来访问这个节点?我正在寻找一个vanilla JavaScript解决方案,没有任何库的帮助.
我的第一个想法是深入首先搜索DOM并将找到的节点与节点类型值进行比较以进行评论Node.COMMENT_NODE.有没有更简单的方法?
有TreeWalkerAPI:
var tw = document.createTreeWalker(document, NodeFilter.SHOW_COMMENT, null, null),
comment;
while (comment = tw.nextNode()) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
IE8及更低版本不支持此功能.
TJ在评论中提供了规范的链接.我总是只使用TreeWalkers,但在你的情况下,a NodeIterator也很好.
该nodeType核心属性,可以节点类型的区分.在这种特殊情况下,8代表评论.因为他们没有选择器,你需要循环他们的父母来获取它们(这很糟糕,我知道).以下代码将为您筛选出来:
$("*").contents().filter(function(){
return this.nodeType == Node.COMMENT_NODE;
})
Run Code Online (Sandbox Code Playgroud)
还有我自己的jQuery-less版本,因为有些人没有它:
function getAllComments() {
var t = [],
recurse = function (elem) {
if (elem.nodeType == Node.COMMENT_NODE) {
t.push(elem);
};
if (elem.childNodes && elem.childNodes.length) {
for (var i = 0; i < elem.childNodes.length; i++) {
recurse(elem.childNodes[i]);
};
};
};
recurse(document.getElementsByTagName("html")[0]);
return t;
};
Run Code Online (Sandbox Code Playgroud)
如果您要搜索特定节点,请将document.getElementsByTagName调用重新绑定到您选择的变量.