hogehoge foobar Blog Style Beta

Web,Mac,Linux,JavaScript,Perl,PHP,RegExp,Git,Vim,Redmineなど技術的なことのメモや、ちょっと便利そうなものの紹介をしています。

getElementsByClassNameを自作してみる パート2

以前、getElementsByClassNameを自作してみましたが、少し作りを変えてみました。
前の作りだと、コードが冗長化されてしまっていたので、一部の処理を共通化してみました。

/***********************************************
 * クラス名、タグ名で指定されたElementを取得
 ***********************************************/
var getElementsByClassName = (function(classname, tagname){
    
    //共通となる処理をfunctionにする
    var regClass = function(element, classname){
        var classElements = new Array();
        var regexe = new RegExp("\\b" + classname + "\\b");
        for( i = 0; i < element.length; i++ ) {
            if( regexe.exec(element[i].className) ) {
                classElements.push(element[i]);
            }
        }
        return classElements;
    }
    //IEの場合
    if( document.all ){
        return function(classname, tagname){
            if (arguments.length == 1) {
                element = document.all;
            }
            else{
                element = document.getElementsByTagName(tagname);
            }
            return regClass(element,classname);
        };
    }
    //IE以外の場合
    else{
        return function(classname, tagname){
            if (arguments.length == 1) {
                tagname = "*";
            }
            var element = document.getElementsByTagName(tagname);
            return regClass(element,classname);
        };
    }

})();