如果我有这个能力
<!-- some comment -->
如何获取此元素并使用javascript更改内容?如果我在其中有一段代码,并且我想删除注释标记,我该怎么做呢?
发布于 2012-11-13 23:56:10
使用NodeIterator (IE >= 9)
最好的方法是使用一个专用的NodeIterator实例来迭代给定根元素中包含的所有注释。
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 type为Node.COMMENT_NODE
的元素。
// 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)
发布于 2012-11-13 23:54:19
你必须遍历DOM才能得到它。注释DOM元素的nodeType
是8
if( oNode.nodeType === 8 ) {
oNode.parentNode.removeChild( oNode );
}
将是一种方法
发布于 2012-11-13 23:53:41
下面是一个检索评论的JQuery插件:
基本思想是查看nodes
,而不是elements
http://www.w3schools.com/htmldom/dom_nodes.asp
您从document
对象开始,然后使用childNodes
集合遍历它们。您必须检查node.nodeType == 8
,它将只返回注释节点(请注意,您需要递归地遍历子节点)。
https://stackoverflow.com/questions/13363946
复制相似问题