91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用JS動態構建目錄樹

發布時間:2022-01-12 17:43:33 來源:億速云 閱讀:179 作者:柒染 欄目:開發技術

本篇文章給大家分享的是有關如何使用JS動態構建目錄樹,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

在使用frameset布局的時候,經常會用到目錄樹,我們可以把一棵樹寫死,但是更多的情況是,這棵樹需要隨時被改動,所以我們期望的是他能夠被動態的構建。

MVC,算是了解一點,那下面就把這棵樹根據M-V-C給拆開分解吧。

如何使用JS動態構建目錄樹

下面就來看看這棵樹是怎么構建的。

Module [數據層]

var tree = {
            "id": 0,
            "a1": {
                "id": 1,
                "name": "a1",
                "children": {
                    "b1": "b1_1",
                    "b2": "b1_2",
                    "b3": "b1_3"
                }   
            },
            "a2": {
                "id": 1,
                "name": "a2",
                "children": {}
            },
            "a3": {
                "id": 1,
                "name": "a3",
                "children": {
                    "b1": "b3_1",
                    "b2": "b3_2",
                    "b3": "b3_3"
                }
            }
        };

這是一顆兩層的目錄樹,用ID來表示層級關系,name來表示改層的名字(也就是節點Text內容吧)。

Control [控制層]

var Tree = function ( module ){
    function createNodeList( obj ) {
        //創建ul節點和documentFragmeng中間變量
        var n = document.createElement("ul"),
            docfrag = document.createDocumentFragment();

        //判斷obj是根節點還是孩子節點
        if(obj.id == 0) {
            n.setAttribute("class", "tree_0");

            for(var key in obj) {
                if(key == "id") continue;
                //將節點插入
                var c = document.createElement("li"),
                    span = document.createElement("span");
                span.appendChild(document.createTextNode( obj[key].name ));
                c.appendChild(span);
                docfrag.appendChild( c );
            }
        }else if(obj.id && obj.id == 1) {
            n.setAttribute("class", "tree_1");

            for(var key in obj) {
                if(key == "id" || key == "name" || !obj.children) continue;
                for( var item in obj.children){
                    //將節點插入
                    var c = document.createElement("li");
                    c.appendChild(document.createTextNode( obj.children[item] ));
                    docfrag.appendChild( c );
                }
            }
        }
        n.appendChild( docfrag );
        //返回開始構建的ul節點
        return n;
    }

    //隱藏及顯示 工具函數
    function toggle(c){
        c.style.display = ((c.style.display == "none") ? "" : "none");
    }

    function createTree( obj ) {
        var root, child, count = 0;

        root = createNodeList( obj );
        for(var key in obj){
            if(obj[key] == "id" || !obj[key].children) continue;
            child = createNodeList(obj[key]);
            root.children[count].appendChild( child );
            //count來判斷插入的位置
            count++;
        }
        return root;
    }

    var T = createTree(module);
    var list = T.children;
    for(var i = 0, len = list.length; i < len; i++){
        list[i].getElementsByTagName("span")[0].onclick = function(){
            var obj = this.nextSibling;
            toggle(obj);
        }
    }
    return T;
}

這里邊創建了三個函數,其中

createNodeList() //適用于構建一個樹子節點

其中使用documentFragment作為一個節點緩存器,先把節點放置到documentFragment中,然后統一插入到ul,這也是比較常用的使用方式。

createTree() //構建一棵樹

基本整棵樹的構建就是分為這兩步,前者負責創建一個子節點,后者構建一棵樹。

在這顆樹中綁定了click事件,讓其可以折疊,當然也可以在Tree這個類里綁定更多的方法,這個就靠自己發揮了。

View [視圖層]

window.onload = function(){
    var T = new Tree(tree);
    document.getElementsByTagName("body")[0].appendChild(T);
}

整棵樹的構建,主要用到的是DOM元素的處理,這個必須牢牢掌握!

以上就是如何使用JS動態構建目錄樹,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

洛阳市| 双牌县| 咸阳市| 沁阳市| 囊谦县| 金坛市| 新乡市| 甘泉县| 隆昌县| 孝感市| 盐山县| 璧山县| 樟树市| 北京市| 湛江市| 武威市| 衡山县| 巨鹿县| 武宁县| 安宁市| 塔城市| 新邵县| 佛山市| 大荔县| 澳门| 黎平县| 桦甸市| 鹤山市| 遂平县| 松潘县| 桂平市| 汕尾市| 佛冈县| 雷州市| 仪征市| 迁安市| 达孜县| 咸宁市| 邯郸县| 蕉岭县| 明溪县|