j**ascript getElementsByClassName函数

时间:2016.04.18 发布人:破碎的希望1

j**ascript getElementsByClassName函数

已解决问题

谷歌破碎的希望1用户在2016.04.18提交了关于“长生诀j**ascript getElementsByClassName函数”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T09:14:50。希望大家能够帮助她。

详细问题描述及疑问:期待您的答案,你无异于雪中送炭,让我感激涕零 !

希望以下的回答,能够帮助你。

第1个回答

用户名:hldbj3s9  

今天在网上看到的按吗刻一个根据ClassName获取Elements的问答脚本,在此记录一下,以便日后使用。
复制代码代码如下:
vargetElementsByClassName=function(searchClass,node,tag){
if(docume微散担苗热滑度广顺nt.getElementsByClassName){
returndocument.getElementsByClassName(searchClass)
}else{
node=node||document;
tag=tag||"*";
varclasses=searchClass.split(""比矛水),
elements=(tag==="*"&&node.all)?node.all:node.getElementsByTagName(tag),
patterns=[],
returnElements=[],
curr容向政ent,
match;
vari=classes.length;
while(--i>=0){
patterns.push(newRegExp("(^|\\s)"+classes[i]+"(\\s|$)"));
}
varj=elements.length;
while(--j>=聚验承金围胶志由这责0){
current=elements[j];
match=false;
for(vark=0,kl=patterns.lengt信望h;k<kl;k++){
match=patterns[k].test(current.className);
if(!match)bre**;
}
if(match)ret搞紧或黑后何图urnElements.push(current);
}
returnreturnElements;
}
}

下面是网上其它的一些相关介绍,大家可以一起参考下。

DOM中的getEl帮ementsByClassName解释如下:DOMAPI中提供3种方法取元素(getElementById,getElementsByName,getElementsByTagName),经常编写CSS的人自然就会**生疑问,语下的有没有根据样式类名取元素的方法,可惜,DOM1/2里面都没有这样的方法,prototype很早就扩展过DOM的方法,添加了getElementsByClassName,从方法名上看,似乎非常正统,与前面3种方法名称也像,分析其代码,却发现还是通过getElementsB探在包木张刚会零圆心义yTagName来实现。这个方法称不上优雅,因为需要遍历所有的元素,探做喜相夜何未上结测元素是否包含目标样式类名,返回符合条件的元素数组。google了一下,却没有找到更优雅高效的替代方法。
复制代码代码如下:
functiongetElements策采席行ByClassName(cla架往值且ssName,parentElement){
varelems=($(parentElement)||document.body).getElementsByTagName("*");
varresult=[];
for(i=0;j=elems[i];i++){
if((""+j.className+"").indexOf(""+classNa刑好me+"")!=-1){
result.push(j);
}
}
returnresult;
}

既然有getElementsByClassName,一样可以有getElementsByAttribute(如:getElementsByValue、getElementsByStyle、getElementsByType)
复制代码代码如下:
d液资烈况毛副标间令权ocument.getElementsByClassName=function(className,o关所资素圆干之Box){
//适用于获取某个h**TML区块**含有某一特定className的所有h**TML元素
this.d=oBox||document;
varchildren=this.d.getElementsByTagName('*')||document.all;
varelements=newArray();
for(varii=0;ii<children.length;ii++){
varchild=children[ii];
varclassNames=child.className.split('');
for(varj=0;j<classNames.length;j++){
if(classNames[j]==className){
elements.push(child);
bre**;
}
}
}
returnelements;
}

document.getElementsByType=function(sTypeValue,oBox){
//适用于获取某个h**TML区块**同属于某一特定type的所有h**TML元素,如:input,script,link等等
this.d=oBox||document;
varchildren=this.d.getElementsByTagName('*')||document.all;
varelements=newArray();
for(varii=0;ii<children.length;ii++){
if(children[ii].type==sTypeValue){
elements.push(children[ii]);
}
}
returnelements;
}

function$(){
varelements=newArray();
for(varii=0;ii<arguments.length;ii++){
varelement=arguments[ii];
if(typeofelement=='string')
element=document.getElementById(element);
if(arguments.length==1)
returnelement;
elements.push(element);
}
returnelements;
}

$Cls=function(s,o){
returndocument.getElementsByClassName(s,o);
};

$Type=function(s,o){
returndocument.getElementsByType(s,o);
};

$Tag=function(s,o){
this.d=o||document;
returnthis.d.getElementsByTagName(s);
};

$Name=function(s){//通过name的方式只能针对整个document而言,不能为其限定范围
returndocument.getElementsByName(s);
};