js学习总结----getElementsByClass

JS本身是有getElementsByClass方法,但是在ie6-8是不兼容的,所以这里自己封装一个兼容的该方法

function getElementsByClass(className,context){
        context = context || document;
        //把传递进来的样式类名的首尾空格先去掉,然后在按照中间的空格把里面的每一项拆分成数组
        var classNameAry = className.replace(/(^ +| +$)/g,"").split(/ +/g);

        //获取指定上下文中的所有的元素标签,循环这些标签,获取每一个标签的className样式类名的字符串
        var ary = [];
        var nodeList = context.getElementsByTagName("*");
        for(var i = 0,len=nodeList.length;i<len;i++){
            var curNode = nodeList[i];
            //判断curNode.className是否包含classNameAry里面的样式值

            //
            var isOk = true;//我们假设curNode
            for(var k = 0;k<classNameAry.length;k++){
                var curName = classNameAry[k];
                var reg = new RegExp("(^| +)"+curName+"( +|$)");
                if(!reg.test(curNode.className)){
                    isOk = false;
                    break;
                }
            }
            if(isOk){//拿每一个标签分别和所有样式类名比较后,如果结果还是true的话,说明当前元素标签包含了所有的样式,也是我们想要的。
                ary.push(curNode)
            }
        }

    }

 

posted @ 2017-07-11 17:24  diasa  阅读(550)  评论(0编辑  收藏  举报