1. 程式人生 > >Ztree實現樹形選單

Ztree實現樹形選單

**

zTree使用教程

**

在實際的專案開發中,主要使用zTree來進行非同步載入資料,如果資料量大的話,這樣可以大大的減少伺服器的壓力,初學zTree,費了很多心思,現在總結zTree的使用方法。
1. 下載JQuery zTree v3.5.zip (有更高的版本)
2. 下載後開啟的目錄
3. 然後引人css和js (必須要放入相應的位置,特別是css):

**
**

實現效果圖:

**

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

HTML頁面程式碼:

**

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>zTree 案例</title> <script type="text/javascript" src="js/jquery-1.4.4.min.js"></script> <script type="text/javascript" src="js/jquery.ztree.core-3.0.js"></script>
<link rel="stylesheet" type="text/css" media="screen" href="css/zTreeStyle/zTreeStyle.css" /> <script language="JavaScript"> var setting = { view: { //dblClickExpand: false, expandSpeed: 100 //設定樹展開的動畫速度 }, //獲取json資料 async : { enable : true
, url: "ZtreeServlet", // Ajax 獲取資料的 URL 地址 autoParam : [ "id", "name" ] //ajax提交的時候,傳的是id值 }, data:{ // 必須使用data simpleData : { enable : true, idKey : "id", // id編號命名 pIdKey : "pId", // 父id編號命名 rootPId : 0 } }, // 回撥函式 //treeId callback : { onClick : function(event, treeId, treeNode, clickFlag) { if(true) { alert(" 節點id是:" + treeNode.id + ", 節點文字是:" + treeNode.name); } }, //捕獲非同步加載出現異常錯誤的事件回撥函式 和 成功的回撥函式 onAsyncSuccess : function(event, treeId, treeNode, msg){ } } }; // 過濾函式 function filter(treeId, parentNode, childNodes) { if (!childNodes) return null; for ( var i = 0, l = childNodes.length; i < l; i++) { childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.'); } return childNodes; } // $(document).ready(function() { $.fn.zTree.init($("#tree"), setting ); });
</script> </HEAD> <BODY> <div> <!—這裡的 ulclass名字一定要是ztree,不能更改--> <ul id="tree" class="ztree"></ul> </div> </BODY> </HTML>

提交的action :返回一個json(其實就是一個字串)資料,這裡的json資料需要自己來拼接,拼接好後返回就行了,json資料拼接成:[{“id”:”1”,”pId”:”0”,”name”:”張學友”,”isParent”:true},
{“id”:”11”,”pId”:”1”,”name”:”吻別”},
{“id”:”2”,”pId”:”0”,”name”:”劉德華”,”isParent”:true},
{“id”:”21”,”pId”:”2”,”name”:”練習” }]
就可以了。
String json =
[{“id”:”1”,”pId”:”0”,”name”:”張學友”,”isParent”:true},
{“id”:”11”,”pId”:”1”,”name”:”吻別”},
{“id”:”2”,”pId”:”0”,”name”:”劉德華”,”isParent”:true},
{“id”:”21”,”pId”:”2”,”name”:”練習” }]

Out.print(json);

注意:如果要一次性載入全部資料的話,就直接從資料庫取出全部資料來拼接就行了,如果要非同步載入資料的,就需要用到一個引數://獲取json資料
async : {
enable : true,
url : “${projectUtil.getWebRealPath()}/treeview/treeview!zTreeJSON.action”, // Ajax 獲取資料的 URL 地址
autoParam : [ “id”, “name” ] //ajax提交的時候,傳的是id值
},
先從資料庫取出最頂級資料。然後根據id號再從資料庫查詢。

**

Java程式碼部分實現:

**

package com.yydhy.treetable;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ZtreeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        String json = "[{\"id\":\"1\",\"pId\":\"0\",\"name\":\"張學友\"},\n"
                + "{\"id\":\"11\",\"pId\":\"1\",\"name\":\"吻別\"},\n"
                + "{\"id\":\"2\",\"pId\":\"0\",\"name\":\"劉德華\"},\n"
                + "{\"id\":\"20\",\"pId\":\"2\",\"name\":\"練習劉德華01\" },"
                + "{\"id\":\"21\",\"pId\":\"20\",\"name\":\"練習劉德華01-01\" },"
                + "{\"id\":\"22\",\"pId\":\"2\",\"name\":\"練習劉德華02\" }]";
        response.getWriter().write(json);

    }
}

**

自定義部門樹形選單實現

:(修改了自定義屬性depart_id

**

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>zTree 案例</title>
        <script src="zTree_v3/js/jquery-1.4.4.min.js" type="text/javascript"></script>
        <script src="zTree_v3/js/jquery.ztree.core-3.5.min.js" type="text/javascript"></script>
        <link href="zTree_v3/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css"/>
        <script language="JavaScript">
            var setting = {
                view: {
                    //dblClickExpand: false,
                    expandSpeed: 100 //設定樹展開的動畫速度
                },
                //獲取json資料
                async: {
                    enable: true,
                    url: "ZtreeMyServlet", // Ajax 獲取資料的 URL 地址  
                    autoParam: ["depart_id", "name"] //ajax提交的時候,傳的是id值
                },
                data: {// 必須使用data  
                    simpleData: {
                        enable: true,
                        idKey: "depart_id", // id編號命名   
                        pIdKey: "parentid", // 父id編號命名    
                        rootPId: 0
                    }
                },
                // 回撥函式  
                //?????treeId
                callback: {
                    onClick: function (event, treeId, treeNode, clickFlag) {
                        if (true) {
                            alert(" 節點id是:" + treeNode.id + ", 節點文字是:" + treeNode.name);
                        }
                    },
                    //捕獲非同步加載出現異常錯誤的事件回撥函式 和 成功的回撥函式  
                    onAsyncSuccess: function (event, treeId, treeNode, msg) {
                    }
                }
            };

            // 過濾函式  
            function filter(treeId, parentNode, childNodes) {
                if (!childNodes)
                    return null;
                for (var i = 0, l = childNodes.length; i < l; i++) {
                    childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
                }
                return childNodes;
            }

            //   
            $(document).ready(function () {
                $.fn.zTree.init($("#tree"), setting);
            });
        </script>  
    </HEAD>  
    <BODY>  
        <div>  
            <!--<!—這裡的 ul 的class名字一定要是ztree,不能更改-->
            <ul id="tree" class="ztree"></ul>  
        </div>  
    </BODY>  
</HTML>