【js:class属性】——自定义function:getElementsByClassName

OM 提供了一个名为 getElementById() 的方法,这个方法将返回一个对象,这个对象就是参数 id 所对应的元素节点。另外,getElementByTagName() 方法会返回一个对象的数组,每一个对象分别对应着文档里有给定标签的一个元素。这个方法的参数是 html 标签的名字。现在我们考虑一个问题,能不能通过标签的类名class name来获取该对象呢?下面是这个猜想的程序实现(支持多个class查询和在某个范围内进行查询):

<span style="font-family:Verdana,宋体;color:#121c46;line-height:18px; text-indent:24px">/*
 
	 * 根据元素clsssName得到元素集合 
	 * @param fatherId 父元素的ID,默认为document 
	 * @tagName 
 	 * @className 用空格分开的className字符串
 
	 */ 
	function getElementsByClassName(fatherId,tagName,className){ 
	    node = fatherId&&document.getElementById(fatherId) || document; 
	    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;
	}
</span>

测试
<span style="font-family:Verdana,宋体;color:#121c46;line-height:18px; text-indent:24px"><div id="container">
   <span class="aaa zzz ccc"></span>
   <div class="aaa bbb ccc"></div>
</div>
<div class="aaa bbb ccc"></div>
window.onload = function(){
   alert(getElementsByClassName(document,"div","aaa ccc").length);//2
   alert(getElementsByClassName("container","div","aaa ccc").length);//1
   alert(getElementsByClassName("container","span","aaa zzz").length);//1
}</span>

eg:

getElementsByClassName("dd","a","curr")[0].className = "";
获取 className是  的对象,将其设置为“空字符串”;
这个是在做选中时显示高亮功能时用到的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值