読者です 読者をやめる 読者になる 読者になる

ドキュメント中のコメントノードを全て取得する関数

こんなことやりたい人が他にいるのか判らないけど、ドキュメント中のコメントノードを全て取得する関数を作ってみた。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 が取れてきちゃうけど、それほど大きな害がないのと、上手い弾き方が思いつかなかったので放置。