我们在开发网站过程中,经常会碰到代码和不能和各主流浏览器都兼容的情况。往往照顾到了IE,但chrome浏览器又会出问题。这也是令程序员比较头疼的地方。
今天本文主要和大家探讨下如何解决getElementsByClassName兼容浏览器的问题,解决办法当然有很多,但本文谈到的这种也许不是最好的,但确是最实用的。
原生的JS给我们提供了getElementsByClassName方法,可以通过此方法获取到含有某指定class的节点集合,注意是集合,也就是此函数返回一个数组。
但是,IE却并不支持这个方法,但这方法却是很有实用性,所以,我们又不得不专门为IE实现这么一个函数。
怎么实现呢?我们想,这是获取某节点下含有某class的方法,那么,我们就要给这个函数传两个参数:className和context上下文。接着,我们可以判断浏览器是否支持getElementsByClassName方法,支持的话,我们直接调用此方法返回,不支持,则继续下面的思路。
- 获取所有getElementsByClassName下的所有节点元素;
- 遍历获取到的所有节点,匹配我们指定的className的类名,匹配成功就赋值。
上面的思路并不是很清晰,但代码会清晰得告诉我们,如下:
function getClass(tagname, className) { //tagname指元素,className指class的值 //判断浏览器是否支持getElementsByClassName,如果支持就直接的用 if (document.getElementsByClassName) { return getElementsByClassName(className); } else { //当浏览器不支持getElementsByClassName的时候用下面的方法 var tagname = document.getElementsByTagName_r(tagname); //获取指定元素 var tagnameAll = []; //这个数组用于存储所有符合条件的元素 for (var i = 0; i < tagname.length; i++) { //遍历获得的元素 if (tagname[i].className == className) { //如果获得的元素中的class的值等于指定的类名,就赋值给tagnameAll tagnameAll[tagnameAll.length] = tagname[i]; } } return tagnameAll; } }
以上代码注释很清楚,希望可以帮到您。
声明:如需转载,请注明来源于www.webym.net并保留原文链接:http://www.webym.net/jiaocheng/62.html