getElementsByClassName()用法详解

getElementsByClassName()用法详解:
在编程中,我们习惯于使用以下方式获取对象:

getElementById(‘id‘)
getElementsByName(‘name‘)
getElementsByTagName(‘tag‘)

第一个可以获取指定id值的对象,第二个可以获取具有指定name属性值的对象集合,第三个则是获取指定标签名称的对象集合。这三种方式在编写代码中非常的常用,当然也非常的便利,这个时候可能很多朋友就有这样的以为,class属性作为标签的常用属性,有没有一个方法能够通过制定的class属性值获取对象,其实这样的方法并非没有:

getElementsByTagName("class")

此方法实现了我们想要的功能,它可以获取具有指定class属性值的对象集合,但是令人遗憾的是具有浏览器兼容问题。
代码实例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>getElementsByClassName()用法详解-蚂蚁部落</title>
<script type="text/javascript">
window.onload=function(){
  document.getElementsByClassName("mytest")[0].style.color="#F00";
}
</script>
</head>

<body>
  <div class="mytest">大家好</div>
</body>
</html>

以上代码可以在谷歌、火狐和IE8以上的浏览器中完美运行,但是IE8和IE8以下的浏览器不支持此函数。虽然在将来低版本的IE浏览器退出市场之后,此函数肯定会意气风发,当前来说还是最好不要直接使用此函数,不过我们可以模拟实现此函数。
代码实例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>getElementsByClassName()用法详解-蚂蚁部落</title>
<script type="text/javascript">
var getElementsByClass=function(searchClass,node,tag){
  var classElements=new Array();
  if(node==null){
    node=document;
  }
  if(tag==null){
    tag=‘*‘;
  }
  var els=node.getElementsByTagName(tag);
  var elsLen=els.length;
  var pattern=new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
  for(i=0,j=0;i<elsLen;i++) {
   if(pattern.test(els[i].className)){
    classElements[j]=els[i];
    j++;
   }
  }
  return classElements;
}
window.onload=function(){
  getElementsByClass("haha")[0].style.color="#F00";
}
</script>
</head>
<body>
  <div class="mytest haha">大家好</div>
</body>
</html>

以上代码模拟实现了getElementsByClassName()功能,下面简单介绍一下如何实现此功能:
一.实现原理:
通过getElementsByTagName()函数获取相应的对象集合,然后再使用for循环语句来遍历每一个对象,并使用pattern.test()检测对象的className属性值是否含有正则表达式所匹配的内容,如果有则说明对象的具有指定的class属性值,并将此对象存储在classElements数组中,最后返回此数组,此数组中的元素即是具有指定class属性值的对象。
二.代码注释:
1.var classElements=new Array(),创建一个数组用来存放具有指定class属性值的对象。
2.if(node==null),判断是否指定了节点,如果没有则使用document作为默认节点。指定了getElementsByTagName()的查找范围。
3.if(tag==null),判断是否指定了标签名称,如果没有则使用通配符(*),也就是获取所有的标签。
4.var els=node.getElementsByTagName(tag),获取指定节点下具有指定标签名称的对象。
5.var elsLen=els.length,获取对象的数量。
6.var pattern=new RegExp("(^|\\s)"+searchClass+"(\\s|$)"),创建一个正则对象,规定如何检索具有给定class属性值的对象。这里需要具有一定的正则表达式知识。之所以使用以上规则就是为兼容class="mytest haha"这种形式的class属性值和防止一个class属性值中包含有要检索的class属性值被匹配的情况,例如,一个class="haorenyisheng" ,另一个class="hao",如果要检索"hao",这样"haorenyisheng"就不会被匹配了。
7.for循环用来执行便利每一个对象的className属性值(即class属性值),并检测是否符合匹配规则,如果符合则将此对象存入classElements数组。
8.return classElements,返回数组对象,即具有指定class属性值的对象。
9.getElementsByClass("haha")[0].style.color="#F00",设置class属性值为"haha"的对象中字体颜色为#F00。

原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=6256

更多内容可以参阅:http://www.softwhy.com/javascript/

时间: 2024-10-23 10:42:45

getElementsByClassName()用法详解的相关文章

js的offsetParent属性用法详解

js的offsetParent属性用法详解:此属性是javascript中较为常用的属性,对于它的良好掌握也是非常有必要的,下面就通过代码实例介绍一下它的用法,希望能够给需要的朋友带来一定的帮助.一.基本介绍:此属性可以返回距离指定元素最近的采用定位(position属性值为fixed.relative或者absolute)父级元素,如果父级元素中没有采用定位的元素,则返回body对象的引用.语法结构: obj.offsetParent 二.代码实例: <!DOCTYPE html> <

python处理word文件:win32com用法详解

目标:用python处理doc文件 方法:引入win32com模块 ************************************************************************** 一.安装 ************************************************************************** 首先要先下载安装win32com模块(起先在linux下装不成功,后在windows下面成功了...) 下载地址:http

jQuery 事件用法详解

jQuery 事件用法详解 目录 简介 实现原理 事件操作 绑定事件 解除事件 触发事件 事件委托 事件操作进阶 阻止默认事件 阻止事件传播 阻止事件向后执行 命名空间 自定义事件 事件队列 jquery中文文档 简介 jquery 之所以成为最受欢迎的前端库,很大一部分是得益于它的事件具有良好的语义,优秀的兼容性,并且便于管理和扩展. 在这里我会介绍 jquery 事件的一些比较基础的用法. 实现原理 jquery 事件脱胎于浏览器的 addEventListener (W3) 和 attac

(转)ProgressDialog用法详解

转载自: ProgressDialog用法详解 ProgressDialog的基本用法 ProgressDialog为进度对话框.android手机自带的对话框显得比较单一,我们可以通过ProgressDialog来自己定义对话框中将要显示出什么东西. 首先看看progressDialog里面的方法 setProgressStyle:设置进度条风格,风格为圆形,旋转的.  setTitlt:设置标题  setMessage:设置提示信息:  setIcon:设置标题图标:  setIndeter

BigDecimal用法详解(转)

BigDecimal用法详解    http://www.cnblogs.com/linjiqin/p/3413894.html 一.简介Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal.BigDecimal所创建的是对象

mapminmax的用法详解 _MATLAB

============外一篇 有关mapminmax的用法详解 by faruto==================================转自:http://www.ilovematlab.cn/thread-47224-1-1.html几个要说明的函数接口:[Y,PS] = mapminmax(X)[Y,PS] = mapminmax(X,FP)Y = mapminmax('apply',X,PS)X = mapminmax('reverse',Y,PS) 用实例来讲解,测试数据

Nmap用法详解

nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息.nmap支持很多扫描技术,例如:UDP.TCP connect().TCP SYN(半开扫描).ftp代理(bounce攻击).反向标志.ICMP.FIN.ACK扫描.圣诞树(Xmas Tree).SYN扫描和null扫描.从扫描类型一节可以得到细节.nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫

CSS中伪类及伪元素用法详解

原文:CSS中伪类及伪元素用法详解 伪类的分类及作用: 注:该表引自W3School教程 伪元素的分类及作用: 接下来让博主通过一些生动的实例(之前的作业或小作品)来说明几种常用伪类的用法和效果,其他的读者可以自己尝试: :active  大致效果为用鼠标点击时,元素增加特效,鼠标松开时,特效消失.多用在按钮的点击上. 写法: 这里id为box的是一div块,在css中首先设置了他的基本样式,下面为加入:active伪类后需要修改的样式. 未点击时: 点击之后: :active.:hover.:

C# ListView用法详解

一.ListView类 1.常用的基本属性: (1)FullRowSelect:设置是否行选择模式.(默认为false) 提示:只有在Details视图该属性才有意义. (2) GridLines:设置行和列之间是否显示网格线.(默认为false)提示:只有在Details视图该属性才有意义. (3)AllowColumnReorder:设置是否可拖动列标头来对改变列的顺序.(默认为false)提示:只有在Details视图该属性才有意义. (4)View:获取或设置项在控件中的显示方式,包括D