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跑马灯代码(自写)
Apr 17 Javascript
学习javascript文件加载优化
Feb 19 Javascript
Bootstrap与KnockoutJs相结合实现分页效果实例详解
May 03 Javascript
bootstrap布局中input输入框右侧图标点击功能
May 16 Javascript
JavaScript遍历求解数独问题的主要思路小结
Jun 12 Javascript
概述javascript在Google IE中的调试技巧
Nov 24 Javascript
JS实现图片垂直居中显示小结
Dec 13 Javascript
React组件的三种写法总结
Jan 12 Javascript
详解Vue使用命令行搭建单页面应用
May 24 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
详解Nuxt.js Vue服务端渲染摸索
Feb 08 Javascript
Vue实现图书管理案例
Jan 20 Vue.js
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
php使用curl发送json格式数据实例
2013/12/17 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
Django验证码的生成与使用示例
2017/05/20 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
使用Django2快速开发Web项目的详细步骤
2019/01/06 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
怎么写好自荐信
2013/10/30 职场文书
大学生咖啡店创业计划书
2014/01/21 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
法人任命书范本
2014/06/04 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
批评与自我批评范文
2014/10/15 职场文书
店铺转让协议书
2014/12/02 职场文书
艺术节开幕词
2015/01/28 职场文书
2016中秋节问候语
2015/11/11 职场文书
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle
python获取对象信息的实例详解
2021/07/07 Python