关于IE中getElementsByClassName不能用的问题解决方法


Posted in Javascript onAugust 26, 2013

今天使用getElementsByClassName写了段小程序,满怀欣喜的准备去测试,在ff,谷歌等主流浏览器上测试都没问题,在IE9上也没问题,在IE6、8中测试的时候就出现问题了,浏览器报错。纠结了下代码,貌似没问题,果断找度娘。。。终于发现问题所在,然来是IE6、8中不支持getElementsByClassName这种方法。随后在网上搜索解决方法,找到了一个比较好的方法,是个老外写的一个方法,定睛一看居然是05年的问题了。。。先上代码:

* 
Developed by Robert Nyman, http://www.robertnyman.com 
Code/licensing: http://code.google.com/p/getelementsbyclassname/ 
*/ 
var getElementsByClassName = function (className, tag, elm){ 
if (document.getElementsByClassName) { 
getElementsByClassName = function (className, tag, elm) { 
elm = elm || document; 
var elements = elm.getElementsByClassName(className), 
nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null, 
returnElements = [], 
current; 
for(var i=0, il=elements.length; i<il; i+=1){ 
current = elements[i]; 
if(!nodeName || nodeName.test(current.nodeName)) { 
returnElements.push(current); 
} 
} 
return returnElements; 
}; 
} 
else if (document.evaluate) { 
getElementsByClassName = function (className, tag, elm) { 
tag = tag || "*"; 
elm = elm || document; 
var classes = className.split(" "), 
classesToCheck = "", 
xhtmlNamespace = "http://www.w3.org/1999/xhtml", 
namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null, 
returnElements = [], 
elements, 
node; 
for(var j=0, jl=classes.length; j<jl; j+=1){ 
classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]"; 
} 
try { 
elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null); 
} 
catch (e) { 
elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null); 
} 
while ((node = elements.iterateNext())) { 
returnElements.push(node); 
} 
return returnElements; 
}; 
} 
else { 
getElementsByClassName = function (className, tag, elm) { 
tag = tag || "*"; 
elm = elm || document; 
var classes = className.split(" "), 
classesToCheck = [], 
elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag), 
current, 
returnElements = [], 
match; 
for(var k=0, kl=classes.length; k<kl; k+=1){ 
classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)")); 
} 
for(var l=0, ll=elements.length; l<ll; l+=1){ 
current = elements[l]; 
match = false; 
for(var m=0, ml=classesToCheck.length; m<ml; m+=1){ 
match = classesToCheck[m].test(current.className); 
if (!match) { 
break; 
} 
} 
if (match) { 
returnElements.push(current); 
} 
} 
return returnElements; 
}; 
} 
return getElementsByClassName(className, tag, elm); 
};

具体怎么使用可以去看他里面的使用方法。

使用这个方法之后,IE6、8中能显示了,但是还是有个随机的问题,有时刷新几次又会报错,暂时无解了。然后我想用jquery能不能解决这个刷新报错的问题,当然用jquery也能替代getElementsByClassName这个方法,具体怎么用这里就不作介绍了。然而事实终不能如人愿,刷新还是会有问题,而且报错是随机的,有时第一次加载过程中就报错,有时刷新几次才报错。大侠们。求解决。

Javascript 相关文章推荐
客户端静态页面玩分页
Jun 26 Javascript
js 调整select 位置的函数
Feb 21 Javascript
javascript 操作select下拉列表框的一点小经验
Mar 20 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
May 22 Javascript
Javascript实现CheckBox的全选与取消全选的代码
Jul 20 Javascript
将中国标准时间转换成标准格式的代码
Mar 20 Javascript
使用node.js半年来总结的 10 条经验
Aug 18 Javascript
Bootstrap每天必学之下拉菜单
Nov 25 Javascript
JavaScript中误用/g导致的正则test()无法正确重复执行的解决方案
Jul 27 Javascript
深入解析Vue 组件命名那些事
Jul 18 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
Apr 16 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
Oct 17 Javascript
关于Jquery操作Cookie取值错误的解决方法
Aug 26 #Javascript
jquery弹出框的用法示例(2)
Aug 26 #Javascript
jquery弹出框的用法示例(一)
Aug 26 #Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
Aug 26 #Javascript
使用js实现雪花飘落效果
Aug 26 #Javascript
JS预览图像将本地图片显示到浏览器上
Aug 25 #Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 #Javascript
You might like
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
JavaScript循环遍历你会用哪些之小结篇
2018/09/28 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
Vue Router的手写实现方法实现
2020/03/02 Javascript
前端 javascript 实现文件下载的示例
2020/11/24 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
python控制台英汉汉英电子词典
2020/04/23 Python
Python制作简易注册登录系统
2016/12/15 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
python实现读取大文件并逐行写入另外一个文件
2018/04/19 Python
python 对给定可迭代集合统计出现频率,并排序的方法
2018/10/18 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
python如何快速生成时间戳
2020/07/21 Python
python简单利用字典破解zip文件口令
2020/09/07 Python
如何利用python生成MD5并去重
2020/12/07 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
英文自荐信
2013/12/19 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
抗洪救灾标语
2014/10/08 职场文书
2015年安全生产目标责任书
2015/01/29 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书