getElementsByClassName()方法不兼容ie低版本JS代码 - wkyseo/blog GitHub Wiki

getElementsByClassName()方法不兼容ie8及以下的浏览器,利用JS定义这个方法,并传入参数来获得,

脚本代码及注释

if (!document.getElementsByClassName) {//如果不存在这个方法  
document.getElementsByClassName = function (cls) {//就自定义一个方法,并传入这个方法的参数,即class名  
var ret = [];//定义一个空数组用来存储获取到指定className元素  
var els = document.getElementsByTagName('*');//获取页面所有元素  
for (var i = 0; i < els.length; i++) {  
if (els[i].className === cls//获取页面元素的className等于传入的那个名字  
|| els[i].className.indexOf(cls + ' ') >= 0  
|| els[i].className.indexOf(' ' + cls + ' ') >= 0  
|| els[i].className.indexOf(' ' + cls) >= 0) {  
ret.push(els[i]);//把获取到的元素压入空数组ret【】中  
}  
}  
return ret;//返回这个结果集,相当于之前的getElementsByClassName返回的 结果集。  
}  
}  

代码解释

if里面的那一段判断className四种情况的代码,因为每一个dom元素可能不止有一个className,如果只有一个className就是第一种情况,前面后面都没有空格嘛。

如果多个,并且你要获取的className排列在第一位就是第二种情况;

排列在中间(只要cls不是第一个和最后一个)就是第三种情况;

排列在最后就是第四种情况;

疑问?indexof()即便 字符串前面有空格,也是可以获取到位置的,为什么要添加第3种和第4种判断呢, 比如:var str = "hello world",document.write(str.indexOf("world"),输出6。