私がそれを持っている場合
<!-- some comment -->
この要素を取得してコンテンツを JavaScript で変更するにはどうすればよいですか? その中にコードがあり、コメントのタグを削除したい場合、どうすればよいですか?
私がそれを持っている場合
<!-- some comment -->
この要素を取得してコンテンツを JavaScript で変更するにはどうすればよいですか? その中にコードがあり、コメントのタグを削除したい場合、どうすればよいですか?
最善の方法は、特定のルート要素に含まれるすべてのコメントを反復する専用の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));
});
古いブラウザ (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)
それを取得するには、DOM をトラバースする必要があります。nodeType
コメントDOM要素の8
if( oNode.nodeType === 8 ) {
oNode.parentNode.removeChild( oNode );
}
アプローチだろう
コメントを取得する JQuery プラグインは次のとおりです。
基本的な考え方はnodes
、 ではなくを見ることelements
です。
http://www.w3schools.com/htmldom/dom_nodes.asp
オブジェクトから開始し、コレクションdocument
を使用してそれらを反復処理します。childNodes
どれがコメント ノードだけを返すかを確認node.nodeType == 8
する必要があります (子ノードを再帰的に反復処理する必要があることに注意してください)。