javascript getElementsByClassName函数


Posted in Javascript onApril 01, 2010

今天在网上看到的一个根据ClassName获取Elements的脚本,在此记录一下,以便日后使用。

var getElementsByClassName = function(searchClass, node, tag) { 
if (document.getElementsByClassName) { 
return document.getElementsByClassName(searchClass) 
} else { 
node = node || document; 
tag = tag || "*"; 
var classes = searchClass.split(" "), 
elements = (tag === "*" && node.all) ? node.all : node.getElementsByTagName(tag), 
patterns = [], 
returnElements = [], 
current, 
match; 
var i = classes.length; 
while (--i >= 0) { 
patterns.push(new RegExp("(^|\\s)" + classes[i] + "(\\s|$)")); 
} 
var j = elements.length; 
while (--j >= 0) { 
current = elements[j]; 
match = false; 
for (var k = 0, kl = patterns.length; k < kl; k++) { 
match = patterns[k].test(current.className); 
if (!match) break; 
} 
if (match) returnElements.push(current); 
} 
return returnElements; 
} 
}

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

DOM中的getElementsByClassName解释如下:DOM API 中提供3种方法取元素(getElementById,getElementsByName,getElementsByTagName),经常编写CSS的人自然就会产生疑问,有没有根据样式类名取元素的方法,可惜,DOM1/2 里面都没有这样的方法,prototype 很早就扩展过DOM的方法,添加了 getElementsByClassName,从方法名上看,似乎非常正统,与前面3种方法名称也像,分析其代码,却发现还是通过 getElementsByTagName 来实现。这个方法称不上优雅,因为需要遍历所有的元素,探测元素是否包含目标样式类名,返回符合条件的元素数组。google了一下,却没有找到更优雅高效的替代方法。

function getElementsByClassName(className, parentElement){ 
var elems = ($(parentElement)||document.body).getElementsByTagName("*"); 
var result=[]; 
for (i=0; j=elems[i]; i++){ 
if ((" "+j.className+" ").indexOf(" "+className+" ")!=-1){ 
result.push(j); 
} 
} 
return result; 
}

既然有getElementsByClassName,一样可以有 getElementsByAttribute(如:getElementsByValue、getElementsByStyle、getElementsByType)
document.getElementsByClassName = function(className,oBox) { 
//适用于获取某个HTML区块内部含有某一特定className的所有HTML元素 
this.d= oBox || document; 
var children = this.d.getElementsByTagName('*') || document.all; 
var elements = new Array(); 
for (var ii = 0; ii < children.length; ii++) { 
var child = children[ii]; 
var classNames = child.className.split(' '); 
for (var j = 0; j < classNames.length; j++) { 
if (classNames[j] == className) { 
elements.push(child); 
break; 
} 
} 
} 
return elements; 
} document.getElementsByType = function(sTypeValue,oBox) { 
//适用于获取某个HTML区块内部同属于某一特定type的所有HTML元素,如:input,script,link等等 
this.d= oBox || document; 
var children = this.d.getElementsByTagName('*') || document.all; 
var elements = new Array(); 
for (var ii = 0; ii < children.length; ii++) { 
if (children[ii].type == sTypeValue) { 
elements.push(children[ii]); 
} 
} 
return elements; 
} 
function $() { 
var elements = new Array(); 
for (var ii = 0; ii < arguments.length; ii++) { 
var element = arguments[ii]; 
if (typeof element == 'string') 
element = document.getElementById(element); 
if (arguments.length == 1) 
return element; 
elements.push(element); 
} 
return elements; 
} 
$Cls = function (s,o){ 
return document.getElementsByClassName(s,o); 
}; 
$Type = function (s,o){ 
return document.getElementsByType(s,o); 
}; 
$Tag = function (s,o){ 
this.d=o || document; 
return this.d.getElementsByTagName(s); 
}; 
$Name = function (s){ //通过name的方式只能针对整个document而言,不能为其限定范围 
return document.getElementsByName(s); 
};
Javascript 相关文章推荐
用js实现随机返回数组的一个元素
Aug 13 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
May 11 Javascript
javascript实现滑动解锁功能
Dec 31 Javascript
javascript实现二级级联菜单的简单制作
Nov 19 Javascript
第一次接触神奇的Bootstrap网格系统
Jul 27 Javascript
详解jQuery中基本的动画方法
Dec 14 Javascript
AngularJS 支付倒计时功能实现思路
Jun 05 Javascript
浅谈pc端rem字体设置的问题
Aug 03 Javascript
vue.js2.0点击获取自己的属性和jquery方法
Feb 23 jQuery
JavaScript Dom 绑定事件操作实例详解
Oct 02 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
Nov 25 Javascript
jQuery实现简易QQ聊天框
Feb 10 jQuery
JS getStyle获取最终样式函数代码
Apr 01 #Javascript
Javascript 通过json自动生成Dom的代码
Apr 01 #Javascript
JS中confirm,alert,prompt函数使用区别分析
Apr 01 #Javascript
JavaScript中实现块作用域的方法
Apr 01 #Javascript
cloudgamer出品ImageZoom 图片放大效果
Apr 01 #Javascript
js 异步处理进度条
Apr 01 #Javascript
JavaScript中String和StringBuffer的速度之争
Apr 01 #Javascript
You might like
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
php去除字符串换行符示例分享
2014/02/13 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
超强的IE背景图片闪烁(抖动)的解决办法
2007/09/09 Javascript
JS注册/移除事件处理程序(ExtJS应用程序设计实战)
2013/05/07 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
利用Python优雅的登录校园网
2020/10/21 Python
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
施华洛世奇美国官网:SWAROVSKI美国
2018/02/08 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
what is the difference between ext2 and ext3
2013/11/03 面试题
新闻发布会主持词
2014/03/28 职场文书
党员活动日总结
2014/05/05 职场文书
保护环境建议书300字
2014/05/13 职场文书
法学自荐信
2014/06/20 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
正确使用MySQL update语句
2021/05/26 MySQL
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
2022/04/18 MySQL
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python