【JavaScript】HTML内のコメント要素をノードとして取得する

やりたいこと

<div class="sample">
<!-- サンプル1 -->
<span>sample1</span>
<!-- サンプル2 -->
<span>sample2</span>
<!-- サンプル3 -->
<span>sample3</span>
</div>

上記のようなとあるHTML要素直下にあるコメントアウトを、js側で取得したい。

解決法

const sample = document.querySelector(".sample");
const nodes = [...sample.childNodes];
const commentNodes = nodes.filter(
(node) => node.nodeType === document.COMMENT_NODE
);
  1. 対象のElementからchildNodesを取得
  2. nodeTypedocument.COMMENT_NODEなノードのみを抽出
const sample = document.querySelector(".sample");
const nodes = [...sample.childNodes];
const commentNodes = nodes.filter(
(node) => node.nodeType === document.COMMENT_NODE
);
const comments = commentNodes.map((commentNode) =>
commentNode.nodeValue.trim()
);
console.log(comments); // ['サンプル1', 'サンプル2', 'サンプル3']

もしコメントのテキストそのものを取得したい場合はnodeValueを参照しtrim()で余計な空白を削除すればOK。