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 相关文章推荐
javascript 兼容所有浏览器的DOM扩展功能
Aug 01 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
Jan 27 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
Mar 06 Javascript
教你用jquery实现iframe自适应高度
Jun 11 Javascript
JS实现左右拖动改变内容显示区域大小的方法
Oct 13 Javascript
js无法获取到html标签的属性的解决方法
Jul 26 Javascript
js常用DOM方法详解
Feb 04 Javascript
详解Javascript中DOM的范围
Feb 13 Javascript
Vue拖拽组件开发实例详解
May 11 Javascript
微信小程序解除10个请求并发限制
Dec 18 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
Jul 09 Javascript
如何基于js判断浏览器版本
Feb 20 Javascript
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
咖啡语言
2021/03/03 咖啡文化
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
浅析php创建者模式
2014/11/25 PHP
php curl 模拟登录并获取数据实例详解
2016/12/22 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
javascript实现倒计时并弹窗提示特效
2015/06/05 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
JavaScript中0和&quot;&quot;比较引发的问题
2016/05/26 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
python怎么自定义捕获错误
2020/06/29 Python
Numpy数组的广播机制的实现
2020/11/03 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
优秀研究生自我鉴定
2013/12/04 职场文书
消防应急演练方案
2014/02/12 职场文书
教学质量评估实施方案
2014/03/17 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
中国世界遗产导游词
2015/02/13 职场文书
民事辩护词范文
2015/05/21 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
丧事答谢词大全
2015/09/30 职场文书
导游词之桂林山水
2019/09/20 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
React如何创建组件
2021/06/27 Javascript