JavaScript中DOM查詢封裝函數(shù)

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

常用的方法有以下幾種:

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

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

        element.getElementsByTagName()    通過元素標簽在指定元素內(nèi)部查找元素

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

        element.getElementsByClassName()    通過元素標簽的className在指定元素內(nèi)部查找元素

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

    html結(jié)構(gòu):

    

  















傳遞的參數(shù)如下:

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

    然后就是封裝函數(shù)了。

    首先我們需要獲取最外層的一個html標簽,然后再在這個標簽內(nèi)部去查找我們需要的元素。

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

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

    然后將接收到的字符串按照空格分隔為一個數(shù)組,數(shù)組的每個元素為一個className、ID或者標簽名。然后接下來就是遍歷了。

        當數(shù)組元素為className時,我們就需要調(diào)用element.getElementsByClassName() 來獲取元素

        當數(shù)組元素為標簽名時,我們就需要調(diào)用element.getElementsByTagName() 來獲取元素

        當數(shù)組元素為ID時,我們就需要調(diào)用document.getElementById()  來獲取元素

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

    

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


    這樣封裝好了之后,我們使用起來就相當?shù)姆奖懔恕?/p>


 

 


歡迎關(guān)注微信公眾號:猴哥說前端