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。