javascript getElementsByClassName擴展函數

代碼:瀏覽器

 function getElementsByClassName(){
    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])||document,//在指定的容器內查找
        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++){
            if(g[o[i].className]){
                h.push(o[i]);
            }
        }
    }else{
        h=c.getElementsByClassName(a);//非IE標準瀏覽器:爲保證元素的原有索引,僅在指定查找一個樣式時使用此方法
    };
    return h;
};

用法:測試

三個參數:
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>
//下面調用,僅返回parent內部,div的樣式符合條件的元素
var o=getElementsByClassName("c b",'div',document.getElementById('parent'));
for(var i=0;i<o.length;i++){
    alert(o[i].innerHTML)
};
//下面調用,返回div的樣式符合條件的元素
var o=getElementsByClassName("c b",'div');
for(var i=0;i<o.length;i++){
    alert(o[i].innerHTML)
};
//下面調用,僅返回parent內部,全部樣式符合條件的元素
var o=getElementsByClassName("c b",document.getElementById('parent'));
for(var i=0;i<o.length;i++){
    alert(o[i].innerHTML)
};
//下面調用,返回全部樣式符合條件的元素
var o=getElementsByClassName("c b");
for(var i=0;i<o.length;i++){
    alert(o[i].innerHTML)
};
相關文章
相關標籤/搜索