JavaScript中DOM查詢封裝函數

    在JavaScript中可以通過BOM查詢html文檔中的元素,也就是所謂的在html中獲取對象然後對它添加一個函數。

常用的方法有以下幾種:

    ①document.getElementById()    通過元素ID在全局查找元素

    ②document.getElementsByTagName()    通過元素標籤名字在全局查找元素

        element.getElementsByTagName()    通過元素標籤在指定元素內部查找元素

    ③document.getElementsByClassName()    通過元素標籤的className在全局查找元素

        element.getElementsByClassName()    通過元素標籤的className在指定元素內部查找元素

    但是很多實際情況下,用這三種方法不是很方便,很多時候需要多次調用,就曉得有點麻煩,代碼量也有點大,所以這個時候我們就需要將查詢函數封裝成一個函數。這裏我們可以參照css包含選擇器的特性,給函數傳遞一串字符串。比如如下所示:

    html結構:

    

    傳遞的參數如下:

     var atrr = $(".box .box1 .div1 span");

    然後就是封裝函數了。

    首先我們需要獲取最外層的一個html標籤,然後再在這個標籤內部去查找我們需要的元素。

    var result = document.getElementsByTagName("html");

    上面的代碼中我們獲取了html中最外層的標籤<html>標籤

    然後將接收到的字符串按照空格分隔爲一個數組,數組的每個元素爲一個className、ID或者標籤名。然後接下來就是遍歷了。

        當數組元素爲className時,我們就需要調用element.getElementsByClassName() 來獲取元素

        當數組元素爲標籤名時,我們就需要調用element.getElementsByTagName() 來獲取元素

        當數組元素爲ID時,我們就需要調用document.getElementById()  來獲取元素

  最後當遍歷完成的時候,我們也就查找到了我們需要的內容。代碼如下:

    

function $(selector){
    var strs = selector.split(" ");//通過空格切割傳遞的字符串
    var result = document.getElementsByTagName("html");//獲取最外層的dom元素
    for(var i = 0,len = strs.length;i<len;i++){//根據傳過來的字符串,一層一層的遍歷查找dom
        if(strs[i].charAt(0)==="#"){//如果是id,返回的是dom元素
            result = document.getElementById(strs[i].slice(1));
        }else if(strs[i].charAt(0)==="."){//如果是class,則返回的是一個僞數組(集合),需要加一個下標,才能獲得dom
            result = byClass(strs[i].slice(1),result[0]);
        }else{//如果是tagName
            if(i===0)//代表傳遞的字符串只有一個tagName,
                result = result[0].getElementsByTagName(strs[i]);
            else
                if(strs[i-1].charAt(0)==="#")//代表上一個是id,返回的是dom,可以直接調用
                    result = result.getElementsByTagName(strs[i]);
                else//代表上一個是class或者tagName,返回的是集合,需要加下標
                    result = result[0].getElementsByTagName(strs[i]);
        }
    }
    
    return result;
}

    這樣封裝好了之後,我們使用起來就相當的方便了。


發佈了21 篇原創文章 · 獲贊 18 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章