1. 程式人生 > >前端樹形結構外掛 zTree 使用入門總結

前端樹形結構外掛 zTree 使用入門總結

zTree是一款依靠Jquery實現的多功能的“數外掛”,優異的效能、靈活的配置、多種功能的組合是它最大的優點。
    zTree v3.0 將核心程式碼按照功能進行了分割,不需要的程式碼可以不用載入;
    採用了 延遲載入 技術,上萬節點輕鬆載入,即使在 IE6 下也能基本做到秒殺;
    相容 IE、FireFox、Chrome、Opera、Safari 等瀏覽器;
    支援 JSON 資料;
    支援靜態 和 Ajax 非同步載入節點資料;
    支援任意更換面板 / 自定義圖示(依靠css);
    支援極其靈活的 checkbox 或 radio 選擇功能;
    提供多種事件響應回撥;
    靈活的編輯(增/刪/改/查)功能,可隨意拖拽節點,還可以多節點拖拽喲;
    在一個頁面內可同時生成多個 Tree 例項;
    簡單的引數配置實現 靈活多變的功能。
1.匯入zTree JS檔案
   (Jquery檔案必須匯入)
    <link rel="stylesheet" href="....s/ztree/css/zTreeStyle/zTreeStyle.css" type="text/css">  
    <script type="text/javascript" src="..../ztree/js/jquery.ztree.all.min.js"></script>
2.簡單樹構建
    建立一個jsp頁面:
    <body>
        <div id="tree" class="ztree"></div>
    </body>
    
    (注意:class必須為ztree)
    
    建立js檔案:
        var $zTree;
        var Nodes = {name:"根節點",open:true,isParent:true,children:{name:"子節點"}}; 
        var setting ={};        
        $zTree = $.fn.zTree.init($("#tree"),setting ,Nodes);
        或者
        $.fn.zTree.init($("#tree"),setting ,Nodes);
        $zTree = $.fn.zTree.getZTreeObj("tree");
        
    到此一顆簡單的樹建立完成。

3.setting配置詳解
    var setting = {
            /**
            *以下兩個引數不必初始化或修改,屬於內部引數。
            *treeId:zTree的唯一標識,初始化後,等於使用者定義的zTree容器的id屬性值。
            *treeObj:zTree的Jquery物件
            */
            treeId:"",
            treeObj:null,
            
            async:{
                //非同步載入時需要自動提交父節點屬性的引數。[setting.async.enable = true 時生效]
                autoParam:[],
                //Ajax 提交引數的資料型別。[setting.async.enable = true //時生效]預設值:"application/x-www-form-urlencoded"
                contentType:"application...",
                //用於對 Ajax 返回資料進行預處理的函式。[setting.async.enable = true 時生效]
                dataFilter:null,
                //Ajax 獲取的資料型別。[setting.async.enable = true 時生效]
                dataType:"text",
                //設定 zTree 是否開啟非同步載入模式
                enable:false,
                //Ajax 請求提交的靜態引數鍵值對。[setting.async.enable = true 時生效]
                otherParam:[],
                //Ajax 的 http 請求模式。[setting.async.enable = true 時生效]
                type:"post",
                //[setting.async.enable = true 時生效]
                headers:{},
                //[setting.async.enable = true 時生效]
                xhrFields:{},
                //Ajax 獲取資料的 URL 地址。[setting.async.enable = true 時生效]
                url:""
            },
            check:{
                //設定自動關聯勾選時是否觸發beforeCheck、onCheck事件回撥函式。
                autoCheckTrigger:true,
                //勾選CheckBox對於父子節點的關聯關係,p:影響父級節點;s:影響子級節點
                chkboxType:{"Y":"ps","N":"ps"},
                //勾選框型別checkbox或radio
                chkStyle:"checkbox",
                //設定zTree節點上是否顯示checkbox/radio
                enable:true,
                //當父結點設定nocheck=true時,設定子節點是否自動繼承nocheck=true
                oncheckInherit:false,
                //當父結點設定chkDisabled=true時,設定子節點是否自動繼承chkDisabled=true.
                chkDisabledInherit:false,
                //radio分組範圍
                radioType:"level"
            },
            data:{
                keep:{
                    //zTree 的節點葉子節點屬性鎖,是否始終保持 isParent = false
                    leaf:false,
                    //zTree 的節點父節點屬性鎖,是否始終保持 isParent = true
                    parent:false,
                }
                key:{
                    //zTree 節點資料中儲存 check 狀態的屬性名稱
                    checked:"checked",
                    //zTree 節點資料中儲存子節點資料的屬性名稱。
                    children:"children",
                    //zTree 節點資料儲存節點是否為父節點的屬性名稱
                    isParent:"isParent",
                    //zTree 節點資料儲存節點是否隱藏的屬性名稱。
                    isHidden:"isHidden",
                    //zTree 節點資料儲存節點提示資訊的屬性名稱。[setting.view.showTitle = true 時生效]
                    //如果設定為 "" ,則自動與 setting.data.key.name 保持一致,避免使用者反覆設定
                    title:"",
                    //zTree 節點資料儲存節點名稱的屬性名稱。
                    name:"name",
                    //zTree 節點資料儲存節點連結的目標 URL 的屬性名稱。
                    //特殊用途:當後臺資料只能生成 url //屬性,又不想實現點選節點跳轉的功能時,可以直接修改此屬性為其他不存在的屬性名稱
                    url:"url"
                }
                simpleData:{
                    //確定 zTree 初始化時的節點資料、非同步載入時的節點資料、或 addNodes 方法中輸入的 newNodes //資料是否採用簡單資料模式 (Array)不需要使用者再把資料庫中取出的 List 強行轉換為複雜的 JSON //巢狀格式
                    enable:false,
                    //節點資料中儲存唯一標識的屬性名稱。[setting.data.simpleData.enable = true 時生效]
                    idKey:"id",
                    //節點資料中儲存其父節點唯一標識的屬性名稱。[setting.data.simpleData.enable = true 時生效]
                    pIdKey:"pId",
                    //用於修正根節點父節點資料,即 pIdKey 指定的屬性值。[setting.data.simpleData.enable = true //時生效]
                    rootPId:null,
                }
            },
            edit:{
                drag:{
                    //拖拽時父節點自動展開是否觸發 onExpand 事件回撥函式。[setting.edit.enable = true 時生效]
                    autoExpandTrigger:true,
                    /**
                    *拖拽時, 設定是否允許複製節點。[setting.edit.enable = true 時生效]
                    *isCopy = true; isMove = true 時,拖拽節點按下 Ctrl 或 Cmd 鍵表示 copy; 否則為 move
                    *isCopy = true; isMove = false 時,所有拖拽操作都是 copy
                    *isCopy = false; isMove = true 時,所有拖拽操作都是 move
                    *isCopy = false; isMove = false 時,禁止拖拽操作
                    */
                    isCopy:false,
                    //拖拽時, 設定是否允許移動節點。[setting.edit.enable = true 時生效]
                    isMove:true,
                    /**
                    *pre:拖拽到目標節點時,設定是否允許移動到目標節點前面的操作。[setting.edit.enable = true 時生效]
                    *next:拖拽到目標節點時,設定是否允許移動到目標節點後面的操作。[setting.edit.enable = true 時生效]
                    *inner:拖拽到目標節點時,設定是否允許成為目標節點的子節點。[setting.edit.enable = true 時生效]
                    *拖拽目標是 根 的時候,不觸發 prev 和 next,只會觸發 inner
                    *此功能主要作用是對拖拽進行適當限制(輔助箭頭),需要結合 prev、next 一起使用,才能實現完整功能。
                    */
                    pre:true,
                    next:true,
                    inner:true,
                    //拖拽節點成為根節點時的 Tree 內邊界範圍 (單位:px)。[setting.edit.enable = true 時生效]
                    borderMax:10,
                    //拖拽節點成為根節點時的 Tree 外邊界範圍 (單位:px)。[setting.edit.enable = true 時生效]
                    borderMin:5,
                    判定是否拖拽操作的最小位移值 (單位:px)。[setting.edit.enable = true 時生效]
                    mionMoveSize:5,
                    //拖拽多個兄弟節點時,浮動圖層中顯示的最大節點數。 多餘的節點用...代替。[setting.edit.enable = true 時生效]
                    maxShowNodeNum:5,
                    //拖拽時父節點自動展開的延時間隔。 (單位:ms)[setting.edit.enable = true 時生效]
                    autoOpenTime:500
                },
                //節點編輯名稱 input 初次顯示時,設定 txt 內容是否為全選狀態。 [setting.edit.enable = true 時生效]
                editNameSelectAll:true,
                //設定 zTree 是否處於編輯狀態
                enable:true,
                //刪除按鈕的 Title 輔助資訊。[setting.edit.enable = true & setting.edit.showRemoveBtn = true 時生效]
                removeTitle:"刪除節點",
                //編輯名稱按鈕的 Title 輔助資訊。[setting.edit.enable = true & setting.edit.showRenameBtn = true 時生效]
                renameTitle:"重新命名",
                /*
                *設定是否顯示刪除按鈕。[setting.edit.enable = true 時生效]
                  當點選某節點的刪除按鈕時:
                  首先觸發 setting.callback.beforeRemove 回撥函式,使用者可判定是否進行刪除操作。
                  如果未設定 beforeRemove 或 beforeRemove 返回 true,則刪除節點並觸發 setting.callback.onRemove 回撥函式。
                /*
                showRemoveBtn:true,
                //設定是否顯示編輯名稱按鈕
                showRenameBtn:true,
            },
            view:{
                //用於在節點上固定顯示使用者自定義控制元件
                addDiyDom:null,
                //用於當滑鼠移動到節點上時,顯示使用者自定義控制元件,顯示隱藏狀態同 zTree 內部的編輯、刪除按鈕
                addHoverDom:null,
                //點選節點時,按下 Ctrl 或 Cmd 鍵是否允許取消選擇操作。
                autoCancelSelected:true,
                //雙擊節點時,是否自動展開父節點的標識
                dblClickExpand:true,
                //zTree 節點展開、摺疊時的動畫速度,設定方法同 JQuery 動畫效果中 speed 引數。
                expandSpeed:true,
                //個性化文字樣式,只針對 zTree 在節點上顯示的<A>物件。
                fontCss:{},
                //設定 name 屬性是否支援 HTML 指令碼
                nameIsHTML:false,
                //用於當滑鼠移出節點時,隱藏使用者自定義控制元件,顯示隱藏狀態同 zTree 內部的編輯、刪除按鈕
                removeHoverDom:false,
                //設定是否允許同時選中多個節點。
                selectedMulti:true,
                showTitle:true,
                showIcon:true,
                showTitle:true,
                //設定 zTree 是否允許可以選擇 zTree DOM 內的文字
                txtSelectEnable:false,
            },    
            /**
            *回撥函式,on-為實際觸發執行的操作,before-為觸發之前的詢問。
            /*            
            callback:{
                onClick:treeonclick,
                beforeCheck:treebeforecheck,
                onCheck:treeoncheck,
                beforeAsync:treebeforeAsync,
                beforeClick:treebeforeClick,
                beforeCollapse:treebeforeCollapse,
                beforeDblClick:treebeforeDbclick,
                beforeDrag:treebeforeDrag,
                beforeDragOpen:treebeforeDragOpen,
                beforeDrop:treebeforeDrop,
                beforeEditName:treebeforeEditName,
                beforeExpand:treebeforeExpand,
                beforeMouseDown:treebeforeMouseDown,
                beforeMouseUp:treebeforeMouseUp,
                beforeRemove:treebeforeRemove,
                beforeRename:treebeforeRename,
                beforeRightClick:treebeforeRightClick,
                
                onAsynError:treeonAsyncError,
                onAsyncSuccess:treeonAsyncSuccess,
                onCollapse:treeonCollapse,
                onDblClick:treeonDbClick,
                onDrag:treeonDrag,
                onDragMove:treeonDragMove,
                onDrop:treeonDrop,
                onExpand:treeonExpand,
                onMouseDown:treeonMouseDown,
                onMouseUp:treeonMouseUp,
                onNodeCreated:treeonNodeCreated,
                onRemove:treeonRemove,
                onRename:treeonRename,
                onRightClick:treeonRightClick,
            }
    };

後續會有treeNode和treeObj的總結,如有錯誤請糾正。