Created
May 10, 2013 16:46
-
-
Save shuizhongyueming/5555661 to your computer and use it in GitHub Desktop.
JavaScript: util getElementsByClassName
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* @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