通过class名获取元素(解决IE8不兼容问题)

Js中获取元素通常有三种方式通过ID(getElementById),标签(getElementsByTagName)以及CLASS名(getElementsByClassName)。前两种方式最为常用,在Chrome,FireFox以及低版本IE8下都好使(win10自带的ie只支持模拟到IE8,再古老的版本直接忽略好了)。可是CLASS名获取元素时,在IE8下出现这样的问题: 对象不支持“getElementsByClassName”属性或方法

因此在ie8下使用CLASS名获取元素时,需要我们自行解决兼容问题。 eg:在下面这个简单的无序列表,有序列表嵌套li的简单HTML页面中,让ul标签下的class为red的li标签背景变红

<body>
    <ul>
        <li class="red"></li>
        <li></li>
        <li class="red2 blue"></li>
    </ul>
    <ol>
        <li class="red"></li>
        <li></li>
        <li></li>
    </ol>
</body>

解决方案如下:

        //oParent:获取元素的父级对象;sClass:要获取的CLASS名(字符串)
        function getByClassName(oParent, sClass) {
            //当getElementsByClassName方法可以用时,直接使用这个方法
            if (oParent.getElementsByClassName) {
                return oParent.getElementsByClassName(sClass);
            } else {
                var aEl = oParent.getElementsByTagName('*');
                var arr = [];
                for (var i = 0; aEl.length; i++) {
                 //声明一个临时数组,把每一个元素获取过来的className存起来
                    var temp = aEl[i].className.split(' ');
                    //在temp中找class里包括red的元素,如果存在则true。让                     //这个元素背景色变红
                    if (findInArr(sClass, temp)) {
                        arr.push(aEl[i]);
                    }
                }
                return arr;
            }
        }
        //函数:查找item在arr中存不存在
        function findInArr(item, arr) {
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] == item) {
                    return true;
                }
            }
            return false;
        }

github:github.com/laclys/HTML-CSS-JS_practice/blob/master/JS/classname获取 封装(对应ie8--).html

END

読んでくれてありがとう~