首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用javascript获取HTML注释

如何使用javascript获取HTML注释
EN

Stack Overflow用户
提问于 2012-11-13 23:49:09
回答 4查看 18K关注 0票数 30

如果我有这个能力

代码语言:javascript
复制
  <!-- some comment -->

如何获取此元素并使用javascript更改内容?如果我在其中有一段代码,并且我想删除注释标记,我该怎么做呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-13 23:56:10

使用NodeIterator (IE >= 9)

最好的方法是使用一个专用的NodeIterator实例来迭代给定根元素中包含的所有注释。

See it in action!

代码语言:javascript
复制
function filterNone() {
    return NodeFilter.FILTER_ACCEPT;
}

function getAllComments(rootElem) {
    var comments = [];
    // Fourth argument, which is actually obsolete according to the DOM4 standard, is required in IE 11
    var iterator = document.createNodeIterator(rootElem, NodeFilter.SHOW_COMMENT, filterNone, false);
    var curNode;
    while (curNode = iterator.nextNode()) {
        comments.push(curNode.nodeValue);
    }
    return comments;
}

window.addEventListener("load", function() {
    console.log(getAllComments(document.body));
});

使用定制的DOM遍历(也支持IE <9)

如果您必须支持较旧的浏览器(例如,IE <9),则需要自己遍历DOM并提取node typeNode.COMMENT_NODE的元素。

See it in action!

代码语言:javascript
复制
// Thanks to Yoshi for the hint!
// Polyfill for IE < 9
if (!Node) {
    var Node = {};
}
if (!Node.COMMENT_NODE) {
    // numeric value according to the DOM spec
    Node.COMMENT_NODE = 8;
}

function getComments(elem) {
  var children = elem.childNodes;
  var comments = [];

  for (var i=0, len=children.length; i<len; i++) {
    if (children[i].nodeType == Node.COMMENT_NODE) {
      comments.push(children[i]);
    }
  }
  return comments;
}

提取节点内容并将其删除

与您从上面选择的方式无关,您将收到相同的节点DOM对象。

访问评论内容就像访问commentObject.nodeValue一样简单。

删除评论有点冗长:commentObject.parentNode.removeChild(commentObject)

票数 31
EN

Stack Overflow用户

发布于 2012-11-13 23:54:19

你必须遍历DOM才能得到它。注释DOM元素的nodeType8

代码语言:javascript
复制
if( oNode.nodeType === 8 ) {
  oNode.parentNode.removeChild( oNode );
}

将是一种方法

票数 5
EN

Stack Overflow用户

发布于 2012-11-13 23:53:41

下面是一个检索评论的JQuery插件:

http://www.bennadel.com/blog/1563-jQuery-Comments-Plug-in-To-Access-HTML-Comments-For-DOM-Templating.htm

基本思想是查看nodes,而不是elements

http://www.w3schools.com/htmldom/dom_nodes.asp

您从document对象开始,然后使用childNodes集合遍历它们。您必须检查node.nodeType == 8,它将只返回注释节点(请注意,您需要递归地遍历子节点)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13363946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档