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 相关文章推荐
Jquery AutoComplete自动完成 的使用方法实例
Mar 19 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
Sep 29 Javascript
JQuery 实现在同一页面锚点链接之间的平滑滚动
Oct 29 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
Mar 08 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
Nov 06 Javascript
原生JS实现图片轮播效果
Dec 26 Javascript
js常用的继承--组合式继承
Mar 06 Javascript
jQuery操作之效果详解
May 19 jQuery
以BootStrap Tab为例写一个前端组件
Jul 25 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
Apr 24 Javascript
Echarts地图添加引导线效果(labelLine)
Sep 30 Javascript
Vue修改项目启动端口号方法
Nov 07 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
提高PHP编程效率的方法
2013/11/07 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP中的替代语法介绍
2015/01/09 PHP
PHP开发实现快递查询功能详解
2019/04/08 PHP
Laravel5.7 Eloquent ORM快速入门详解
2019/04/12 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
js 小贴士一星期合集
2010/04/07 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
Extjs4.0设置Ext.data.Store传参的请求方式(默认为GET)
2013/04/02 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
Node.js检测端口(port)是否被占用的简单示例
2016/09/29 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
js Array.slice的8种不同用法示例
2019/07/10 Javascript
解决VUE双向绑定失效的问题
2019/10/29 Javascript
python自动化测试之setUp与tearDown实例
2014/09/28 Python
django实现前后台交互实例
2017/08/07 Python
Python3 log10()函数简单用法
2019/02/19 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
2019/07/31 Python
Python pandas用法最全整理
2019/08/04 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
python 如何对logging日志封装
2020/12/02 Python
城建学院毕业生自荐信
2014/01/31 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
公司新员工欢迎词
2015/09/30 职场文书
python如何进行基准测试
2021/04/26 Python
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python