document.getElementsByClassName:简单的原生通过className查找元素,可指定多个样式名称进行查找

来源:互联网 发布:创建网络连接,链接不上 编辑:程序博客网 时间:2024/05/17 06:50
<script type="text/javascript">

//仅为使用习惯保留document.getElementsByClassName()调用方式,无法使用链式访问HTMLDocument.prototype.getElementsByClassName=function(){    if(!arguments[0]){return []};//未指定任何参数,直接返回    var args=arguments,        a=args[0],//要查找的样式名称        b=typeof(args[1])=='string' && args[1]||'*',//指定的标签        c=((typeof(args[1])!='string' && args[1]) || args[2])||this,//在指定的容器内查找        d=a.split(' '),//样式名称列表        e=d.length,//待查找的样式总数        f=e>1,//是否查找多个样式        g={},//存储所有样式:for IE        h=[];//最终对象存储    if(f){        for(var i=0;i<e;i++){            g[d[i]]=!0;        }    }else{        g[a]=!0;    };    if(document.all || (!document.all && f)){        var o=c.getElementsByTagName(b);        for(var i=0;i<o.length;i++){            var temp=o[i].className.split(' ');            if(temp.length>1){                for(var j=0;j<temp.length;j++){                    if(g[temp[j]]){                        h.push(o[i]);                        break;                    }                }            }else{                if(g[temp[0]]){                    h.push(o[i]);                }            }        }    }else{/*if(f){            for(var n=0;n<e;n++){                var k=c.getElementsByClassName(d[n]);                for(var i=0;i<k.length;i++){                    h.push(k[i])                }            };        }*/        h=c.getElementsByClassName(a);//非IE标准浏览器:为保证元素的原有索引,仅在指定查找一个样式时使用此方法    };    return h;};

</script>参数说明:参数1:待查找的样式,可指定多个,用空格分隔;未指定时直接返回参数2:[可选项]可指定查找的特定标签,默认为:遍历所有标签*参数3:[可选项]指定父容器,默认为:document可跳过第2个参数直接指定第3个参数。测试DOM:<div class="c">我在id=parent的层以外</div><div id="parent"> <div class="c">1</div> <div class="c">2</div> <div class="c">3</div> <div class="c">4</div> <div class="c">5</div> <div class="b">56</div> <div class="b">78</div> <span class="c">9</span></div><script type="text/javascript">//下面调用,仅返回parent内部,div的样式符合条件的元素var o=document.getElementsByClassName("c b",'div',document.getElementById('parent'));for(var i=0;i<o.length;i++){ alert(o[i].innerHTML)};//下面调用,返回div的样式符合条件的元素var o=document.getElementsByClassName("c b",'div');for(var i=0;i<o.length;i++){ alert(o[i].innerHTML)};//下面调用,仅返回parent内部,所有样式符合条件的元素var o=document.getElementsByClassName("c b",document.getElementById('parent'));for(var i=0;i<o.length;i++){ alert(o[i].innerHTML)};//下面调用,返回所有样式符合条件的元素var o=document.getElementsByClassName("c b");for(var i=0;i<o.length;i++){ alert(o[i].innerHTML)};</script>