ドキュメント中のコメントノードを全て取得する関数
こんなことやりたい人が他にいるのか判らないけど、ドキュメント中のコメントノードを全て取得する関数を作ってみた。IE7とFirefox3とSafari3.1でしか確認してないけど、他のブラウザでも多分動くはず。
var getAllCommentNodes = (!!document.evaluate) ? (function() { var res = document.evaluate("//comment()", document, null, XPathResult.ANY_TYPE, null); for(var i, nodes = [] ; i = res.iterateNext(); nodes.push(i)); return nodes; }) : (function() { var nodes = []; (function(nodeset) { if(!nodeset) return; for(var i = 0, len = nodeset.length; i < len; i++) { var node = nodeset[i]; switch(node.nodeType) { case 1: arguments.callee(node.childNodes); break; case 8: nodes.push(node); break; } } })(document.childNodes); return nodes; });
注意点としてはIEだとなぜか doctype が取れてきちゃうけど、それほど大きな害がないのと、上手い弾き方が思いつかなかったので放置。