IE不支持getElementsByClassName最终完美解决方案


Posted in Javascript onDecember 17, 2012

目前可以这么解决,判断浏览器支不支持这个方法,如果支持就不管;如果不支持,就在document对象里加入getElementsByClassName这个方法,这样的写法有一个好处,即不管有没有原生函数你都不用去修改代码。

通常先使用getElementsByTagName("*")取出文档中所有元素,然后进行遍历,使用正则表达式找出匹配的元素放入一个数组返回。由于IE5不支持document.getElementsByTagName("*"),要使用分支document.all以防错误

下面的方法完美支持了document写法

if(!document.getElementsByClassName){ 
document.getElementsByClassName = function(className, element){ 
var children = (element || document).getElementsByTagName('*'); 
var elements = new Array(); 
for (var i=0; i<children.length; i++){ 
var child = children[i]; 
var classNames = child.className.split(' '); 
for (var j=0; j<classNames.length; j++){ 
if (classNames[j] == className){ 
elements.push(child); 
break; 
} 
} 
} 
return elements; 
}; 
}

最终的方案为: 
var getElementsByClassName = function (searchClass, node,tag) { 
if(document.getElementsByClassName){ 
var nodes = (node || document).getElementsByClassName(searchClass),result = []; 
for(var i=0 ;node = nodes[i++];){ 
if(tag !== "*" && node.tagName === tag.toUpperCase()){ 
result.push(node) 
}else{ 
result.push(node) 
} 
} 
return result 
}else{ 
node = node || document; 
tag = tag || "*"; 
var classes = searchClass.split(" "), 
elements = (tag === "*" && node.all)? node.all : node.getElementsByTagName(tag), 
patterns = [], 
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) result.push(current); 
} 
return result; 
} 
}
Javascript 相关文章推荐
判断JavaScript对象是否可用的最正确方法分析
Oct 03 Javascript
js 数据类型转换总结笔记
Jan 17 Javascript
JS不能跨域借助jquery获取IP地址的方法
Aug 20 Javascript
JavaScript中ES6 Babel正确安装过程
Jul 18 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
Feb 10 Javascript
详谈jQuery中的一些正则匹配表达式
Mar 08 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
May 07 Javascript
详解如何构建Angular项目目录结构
Jul 13 Javascript
react-native使用react-navigation进行页面跳转导航的示例
Sep 07 Javascript
基于three.js编写的一个项目类示例代码
Jan 05 Javascript
angularjs 的数据绑定实现原理
Jul 02 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
Sep 06 Javascript
jQuery移动和复制dom节点实用DOM操作案例
Dec 17 #Javascript
javascript中判断一个值是否在数组中并没有直接使用
Dec 17 #Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
Dec 17 #Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
Dec 17 #Javascript
如何让页面在打开时自动刷新一次让图片全部显示
Dec 17 #Javascript
js中escape对应的C#解码函数 UrlDecode
Dec 16 #Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
Dec 16 #Javascript
You might like
简单易用的计数器(数据库)
2006/10/09 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
jquery应该如何来设置改变按钮input的onclick事件
2012/12/10 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
JavaScript中如何调用Java方法
2020/09/16 Javascript
paramiko模块安装和使用(远程登录服务器)
2014/01/27 Python
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
Python全局变量操作详解
2015/04/14 Python
Python的时间模块datetime详解
2017/04/17 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
Python面向对象之继承代码详解
2018/01/29 Python
python3爬取各类天气信息
2018/02/24 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
python 截取XML中bndbox的坐标中的图像,另存为jpg的实例
2020/03/10 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
写好自荐信的几个要点
2013/12/26 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
导游词格式
2015/02/13 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
怎样写好工作计划
2019/04/10 职场文书
创业计划之特色精品店
2019/08/12 职场文书
mysql脏页是什么
2021/07/26 MySQL