Skip to content

Instantly share code, notes, and snippets.

@shuizhongyueming
Created May 10, 2013 16:46
Show Gist options
  • Save shuizhongyueming/5555661 to your computer and use it in GitHub Desktop.
Save shuizhongyueming/5555661 to your computer and use it in GitHub Desktop.
JavaScript: util getElementsByClassName
/*
 * @name [getElementsByClassName]
* @overview [根据元素clsssName得到元素集合]
 * @param {[string]} fatherId [父元素的ID,默认为document]
 * @param {[string]} tagName [子元素的标签名]
 * @param {[string]} className [用空格分开的className字符串]
*
* @author unknown
 */
function getElementsByClassName(fatherId,tagName,className){
    var node = fatherId&&document.getElementById(fatherId) || document;
if(node.getElementsByClassName){
return node.getElementsByClassName(className);
}
    tagName = tagName || "*";
    className = className.split(" ");
    var classNameLength = className.length;
    for(var i=0,j=classNameLength;i<j;i++){
        //创建匹配类名的正则
        className[i]= new RegExp("(^|\\s)" + className[i].replace(/\-/g, "\\-") + "(\\s|$)");
    }
    var elements = node.getElementsByTagName(tagName);
    var result = [];
    for(var i=0,j=elements.length,k=0;i<j;i++){//缓存length属性
        var element = elements[i];
        while(className[k++].test(element.className)){//优化循环
            if(k === classNameLength){
                result[result.length] = element;
                break;
            }  
        }
        k = 0;
    }
    return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment