element 取得用

prototype.js っていう javascript のライブラリが出回っているのだけど、そいつでは document.getElementById を $ って一文字だけで書けるようにしてあるらしい。さらに、複数の id を指定すると各要素が配列に格納されて返ってくるらしい。これは便利だと思いイメージで作ってみた。

function $(id){
    if(arguments.length == 1 && typeof arguments[0] == 'string'){
        return document.getElementById(arguments[0]);
    }
    var elements = new Array();
    for(var i = 0; i < arguments.length; i++){
        if(typeof arguments[i] == 'string'){
            elements.push(document.getElementById(arguments[i]));
        } 
    }
    return elements;
}

きっとこんな感じだろう。とりあえず要件は満たしている。

ということで、調子に乗ってこんなのも作ってみた。

function $T(tagname){
    if(typeof tagname == "string"){
        return document.getElementsByTagName(tagname);
    }
    return null;
}

function $C(classname,rootnode,tagname){
    var results = new Array();
    if(rootnode == null){
        rootnode = document;
    }
    if(tagname == null){
        tagname = '*';
    }
    var elements = $T(tagname);
    var pattern = new RegExp("(^|\\s)" + classname + "(\\s|$)");
    for(i = 0; i < elements.length; i++){
        if(pattern.test(elements[i].className)){
            results.push(elements[i]);
        }
    }
    return results;
}

$T は document.getElementsByTagName をただ被せているだけ。$ にちなんで $T にしてみた。 $C は イメージは getElementsByClassName 見たいな感じ。指定された値が class 属性に設定されている要素を取得する。ちなみに複数の class を属性に設定されていても大丈夫なようにしてみた。

こいつらはなかなか使えそうだ。