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访问样式表代码
Oct 15 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
Feb 23 Javascript
js setTimeout opener的用法示例详解
Oct 23 Javascript
javascript Event对象详解及使用示例
Nov 22 Javascript
a标签click和href执行顺序探讨
Jun 23 Javascript
node.js学习总结之调式代码的方法
Jun 25 Javascript
jQuery中ajax的get()方法用法实例
Dec 26 Javascript
javaScript字符串工具类StringUtils详解
Dec 08 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
Sep 18 Javascript
vue+element表格导出为Excel文件
Sep 26 Javascript
Vue学习之常用指令实例详解
Jan 06 Javascript
Vue SPA 首屏优化方案
Feb 26 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实现验证码功能
2006/10/09 PHP
PHP 图片文件上传实现代码
2010/12/29 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
php daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
php微信公众号开发之二级菜单
2018/10/20 PHP
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
js性能优化技巧
2015/11/29 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
实例详解JavaScript中setTimeout函数的执行顺序
2017/07/12 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
vue3实现v-model原理详解
2019/10/09 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
Python交互环境下打印和输入函数的实例内容
2020/02/16 Python
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
请解释在new与override的区别
2012/10/29 面试题
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
运动会致辞稿50字
2014/02/04 职场文书
《邮票齿孔的故事》教学反思
2014/02/22 职场文书
2014年物流工作总结
2014/11/25 职场文书
大学生团员个人总结
2015/02/14 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
教研活动主持词
2015/07/03 职场文书
2015年暑假工作总结
2015/07/13 职场文书