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 动态修改样式和层叠样式表代码
Apr 27 Javascript
jquery动画效果学习笔记(8种效果)
Nov 13 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
Dec 01 Javascript
多种方式实现js图片预览
Dec 12 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
Aug 31 Javascript
p5.js入门教程和基本形状绘制
Mar 15 Javascript
Vue.js 表单控件操作小结
Mar 29 Javascript
详解webpack 入门与解析
Apr 09 Javascript
VUE 全局变量的几种实现方式
Aug 22 Javascript
react实现antd线上主题动态切换功能
Aug 12 Javascript
JSONObject与JSONArray使用方法解析
Sep 28 Javascript
分享几个JavaScript运算符的使用技巧
Apr 24 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
腾讯CMEM的PHP扩展编译安装方法
2015/09/25 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
python写的ARP攻击代码实例
2014/06/04 Python
Python中线程编程之threading模块的使用详解
2015/06/23 Python
python中调试或排错的五种方法示例
2019/09/12 Python
浅析python redis的连接及相关操作
2019/11/07 Python
Python守护进程实现过程详解
2020/02/10 Python
python解释器安装教程的方法步骤
2020/07/02 Python
用python实现前向分词最大匹配算法的示例代码
2020/08/06 Python
AOP的定义以及作用
2013/09/08 面试题
C#实现启动一个进程
2016/10/01 面试题
公益广告宣传方案
2014/02/28 职场文书
学校党的群众路线教育实践活动对照检查材料
2014/09/24 职场文书
校园会短篇的广播稿
2014/10/21 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
校本培训个人总结
2015/02/28 职场文书
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers