DOM getElementsByClassName IE兼容方案
平时写HTML时多用class来命名,为很少用id来命名,主要原因就是class使用起来比较灵活。
但是万恶的JS在操作DOM的时候对ie6+只提供了getElementById和getElementsByTagName两个方法来查找DOM。
这时候就很尴尬了,就不得不在HTML里加入各种各样的id。看了就烦,不爽
Js有提供一个通过class名查找DOM的方法:getElementsByClassName();
但是。。。。。。只支持ie9+ -.-,哎呀好尴尬。。。
只好自己写一个兼容IE的getElementsByClassName()方法出来:
// indexOf兼容
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(x) {
var result = -1;
if (this.length == 0) {
return result;
}
for (var i = 0; i < this.length; i++) {
if (this[i] === x) {
result = i;
break;
}
}
return result;
}
}
// getElementsByClassName兼容
if (!document.getElementsByClassName) {
document.getElementsByClassName = function(c_name, ele) {
//用于输出找到的匹配的DOM元素
var arr = [];
// 查找元素,并计算数组长度
var allTag = (ele || document).getElementsByTagName('*');
var tagLength = allTag.length;
// 对传进来的c_name参数进行分割,并计算数组长度
var cNameList = c_name.split(' ');
var cNameLength = cNameList.length;
// 对所有的tag元素进行遍历
for (var i = 0; i < tagLength; i++) {
// 对每一个tag的class属性进行分割,并计算数组长度
var classList = allTag[i].className.split(' ');
var listLength = classList.length;
// 定义一个空数组
var judge = [];
for (var t = 0; t < cNameLength; t++) {
// 如果cNamelist可以在classList中找到,就给judge push一个true
if (classList.indexOf(cNameList[t]) !== -1) {
judge.push(true);
}
}
// 判断judge是否相等cNameLength,如果相等,表示是我们需要的元素
if (judge.length === cNameLength) {
arr.push(allTag[i]);
}
}
return arr;
}
}
<div id="box">
<div class="one two"></div>
<div class="one three"></div>
<div class="one"></div>
<div class="one"></div>
</div>
<div class="one"></div>
<div class="one"></div>
这个兼容代码可以实现:
1. document.getElementsByClassName("one two");
只找到<div class="one two"></div>
2. document.getElementsByClassName("one");
找到所有div中存在class名为one的元素
3.document.getElementsByClassName("one",document.getElementById("box"));
找到box下的所有存在class名为one的元素
DOM getElementsByClassName IE兼容方案的更多相关文章
- js中getBoundingClientRect的作用及兼容方案
js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ...
- 让IE8支持HTML5及canvas功能!chart.js图表绘制工具库IE8上兼容方案
第一步,我们加上对html5的支持. <!--[if IE]> <script src="/public/html5.js" type="text/ja ...
- Emoji表情符号兼容方案(适用ios,android,wp等平台)
http://blog.csdn.net/qdkfriend/article/details/7576524 Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(え ...
- Drawable 着色的后向兼容方案
看到 Android Weekly 最新一期有一篇文章:Tinting drawables,使用 ColorFilter 手动打造了一个TintBitmapDrawable,之前也看到有些文章使用这种 ...
- [ios2]Emoji表情符号兼容方案 【转】
Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. emoji ...
- localStorage兼容方案
localStorage是H5的存储方案,各大浏览器支持都相当不错,唯一悲催的就是IE,这个浏览器界的另类总是显得格格不入. IE “Internet选项”->“安全”中有一个“启动保护模式”的 ...
- 最新CSS兼容方案
CSS兼容方案,让你的样式完美兼容各大浏览器,这个方案主要是用来解决Safari的,Opear是在测试的时候顺带试了一下,结果发现竟然也行,所以顺便也解决了. .e {/*FF OP*/ color: ...
- Emoji表情符号兼容方案
Emoji表情符号兼容方案 一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. em ...
- 移动端 ios 长按复制兼容方案
移动端页面,需要复制一段文字码. 在ios中,长按文字区域,默认选中的范围,超出了我长按的文字区域, 把上面的图片和下面的另一个div的文字也给我包含进来了,并不是我想要的! 举个例子: 如下图: 1 ...
随机推荐
- ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入
原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...
- OpenCASCADE AIS Manipulator
OpenCASCADE AIS Manipulator eryar@163.com Abstract. OpenCASCADE7.1.0 introduces new built-in interac ...
- 神经网络、logistic回归等分类算法简单实现
最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...
- Android业务组件化之URL Scheme使用
前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...
- const extern static 终极指南
const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...
- 程序猿都没对象,JS竟然有对象?
现在做项目基本是套用框架,不论是网上的前端还是后端框架,也会寻找一些封装好的插件拿来即用,但还是希望拿来时最好自己过后再回过头了解里面的原理,学习里面优秀的东西,不论代码封装性,还是小到命名. 好吧, ...
- [数据结构]——堆(Heap)、堆排序和TopK
堆(heap),是一种特殊的数据结构.之所以特殊,因为堆的形象化是一个棵完全二叉树,并且满足任意节点始终不大于(或者不小于)左右子节点(有别于二叉搜索树Binary Search Tree).其中,前 ...
- KOTLIN开发语言文档(官方文档) -- 2.基本概念
网页链接:https://kotlinlang.org/docs/reference/basic-types.html 2. 基本概念 2.1. 基本类型 从可以在任何变量处理调用成员函数和属性 ...
- mysql 远程访问权限
MySQL默认没有开启远程访问的权限,需要手动打开,步骤如下: 1.通过命令行登录2.mysql>update user set host = '%' where user = 'root';这 ...
- 创建maven项目(cmd 命令)
2016五月 22 原 创建maven项目(cmd 命令) 分类:maven (994) (0) 1.普通方式创建 1)进入cmd窗口执行 mvn archetype:generate 2) 光标停止 ...