30

私がそれを持っている場合

  <!-- some comment -->

この要素を取得してコンテンツを JavaScript で変更するにはどうすればよいですか? その中にコードがあり、コメントのタグを削除したい場合、どうすればよいですか?

4

4 に答える 4

31

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.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-13T15:56:09.713 に答える
5

それを取得するには、DOM をトラバースする必要があります。nodeTypeコメントDOM要素の8

if( oNode.nodeType === 8 ) {
  oNode.parentNode.removeChild( oNode );
}

アプローチだろう

于 2012-11-13T15:54:19.327 に答える
1

コメントを取得する 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する必要があります (子ノードを再帰的に反復処理する必要があることに注意してください)。

于 2012-11-13T15:53:40.657 に答える