1. 程式人生 > >zTree 樹形結構常用功能點

zTree 樹形結構常用功能點

資料格式:

這裡寫圖片描述
示例:

這裡寫圖片描述

一、獲取zTree中選中的節點

/**
 * 獲取treeId中選中的節點Id和Name
 */

function onCheck(treeId){
    var treeObj=$.fn.zTree.getZTreeObj(treeId),
    nodes=treeObj.getCheckedNodes(true),
    v="";
    pid="";
    for(var i=0;i<nodes.length;i++){
        v+=nodes[i].text + ",";
        pid+=nodes[i].pid;
        console.log("節點id:"+nodes[i].id+", 節點名稱:"+v+", pid:"+pid); //獲取選中節點的值
    }
}

二、點選增加

/**
 * 批量-點選新增
 */

violationAllot.add = function() {
    // 獲取已選道路臺賬列表 selectAllotList(全域性變數)
    var treeObj = $.fn.zTree.getZTreeObj("waitTree");
    // 獲取待選道路列表選中的節點的ID、pid、text;
    nodes = treeObj.getCheckedNodes(true);
    // 儲存json中所有的ID
    var allId = getAllAllotId();
    var jsonChild = {};
    var json = {};
    var j = 0;
    // 呼叫js進行新增(單個、批量); 
    for(var i = 0; i < nodes.length; i++){
        // 去重
        if(allId.indexOf(nodes[i].id) != -1 && nodes[i].pid != null) {continue;}
        if(nodes[i].pid == null) {// 父級節點
            json[nodes[i].id] = {
                    id: nodes[i].id,
                    pid: nodes[i].pid,
                    text: nodes[i].text,
                    children: new Array()
                };

        }else {// 如果是子節點
            jsonChild = {
                    id: nodes[i].id,
                    pid: nodes[i].pid,
                    text: nodes[i].text
            };
            json[nodes[i].pid]["children"].push(jsonChild);
        }
    }
    // json和selectAllotList 取並集
    // 預設父級沒有
    var flagParent = false;
    // 預設子級沒有
    var flagChild = false;
    var location = 0;
    var parentId = null;
    var count = 0;
    // selectAllotList > json 增加父級存在的節點
    for(var i = 0; i < selectAllotList.length; i++) {
        count = 0;
        parentId = selectAllotList[i].id;
        if(json[parentId] != null) {// 父級有
            if(json[parentId].children.length == 0) {continue;}
            location = i;
            flagParent = true;
        }else {// 父級沒有則新增父級
            continue;
        }
        for(var j = 0; j < selectAllotList[i].children.length; j++) {
            if(selectAllotList[i].children[j].id == json[parentId].children[count].id) {// 子級有
                flagChild = true;
                break;
            }
        }
        if(!flagChild) {
            jsonChild = {
                    id: json[parentId].children[count].id,
                    pid: json[parentId].children[count].pid,
                    text: json[parentId].children[count++].text
            };
            selectAllotList[location].children.push(jsonChild);
        }
    }
    // json > selectAllotList 增加父級不存在的節點
    allId = getAllAllotId();
    for(var i in json) {
        // 增加父級節點
        if(allId.indexOf(json[i].id) == -1) {
            selectAllotList.push(json[i]);
        }
    }
    //返回更新已選臺賬列表
    selectedTreeObj = $.fn.zTree.init($("#selectTree"), setting, selectAllotList); 
    selectedTreeObj.expandAll(true);
}

三、點選刪除

/**
 * 批量-點選刪除
 */
violationAllot.deleteOne = function() {
    // 獲取已選道路臺賬列表 selectAllotList(全域性變數)
    // 獲取選中的節點
    var treeObj=$.fn.zTree.getZTreeObj("selectTree");
    // 獲取已選道路列表選中的節點的ID、pid、text
    nodes = treeObj.getCheckedNodes(true);
    // 從selectAllotList刪除對應id的節點
    for(var i = 0; i < nodes.length; i++){
        selectAllotList = removeByValue(selectAllotList, nodes[i].id);
    }
    // 返回更新已選臺賬列表
    selectedTreeObj = $.fn.zTree.init($("#selectTree"), setting, selectAllotList); 
    selectedTreeObj.expandAll(true);
}
/**
 * 刪除陣列中id=val的節點
 */
function removeByValue(arr, val) {
  for(var i=0; i<arr.length; i++) {
      for(var j = 0; j < arr[i].children.length; j++) {
          if(arr[i].children[j].id == val){
              arr[i].children.splice(j, 1);
          }
      }
      if(arr[i].children.length == 0 ){
          arr.splice(i, 1);
      }
  }
  return arr;
}

四、點選增加所有

/**
 * 批量-新增所有未分配道路
 */
violationAllot.add_all = function() {
    selectAllotList = new Array();
    var ajax = new $ax(GlobalUtils.ctxPath + "/maintenance/allot/unassignedTreeData" , function (data) {
        if (GlobalUtils.isSuccess(data)) {
            allAllot = data.content;
            selectedTreeObj = $.fn.zTree.init($("#selectTree"), setting, allAllot); 
            // 展開所有
            selectedTreeObj.expandAll(true);
            selectAllotList = allAllot;
        }
    }, function (data) {
    });
    ajax.start();
}

五、點選刪除所有

/**
 * 批量-刪除所有
 */
violationAllot.delete_all = function() {
    selectAllotList = new Array();
    $.fn.zTree.init($("#selectTree"), setting, null); 
}

六、zTree常用功能

6.1 初始化設定

    var setting = {
            view: {
                showIcon: false,  //隱藏icon
                dblClickExpand: false,//雙擊節點時,是否自動展開父節點的標識
                showLine: true,//是否顯示節點之間的連線
                fontCss:{'color': '#33445D', 'font-family': 'Microsoft YaHei UI'},//字型樣式函式
                selectedMulti: true //設定是否允許同時選中多個節點
            },
            data: {
                key: {
                    name: 'text',
                    checked: 'checked',
                    open: 'state'
                },
                simpleData: {
                    enable: true,
                    idKey: 'id',
                    pIdKey: 'pid'
                }
            },
            check : {
                 enable: true,// 顯示多選框
                     autoCheckTrigger: false,
                    chkboxType: { "Y": "ps", "N": "ps" }   
            }  
    };

6.2 初始化

    var ajax = new $ax(GlobalUtils.ctxPath + "/maintenance/allot/treeData" , function (data) {
        if (GlobalUtils.isSuccess(data)) {
            allAllot = data.content;
            zTreeObj= $.fn.zTree.init($("#waitTree"), setting, data.content); 
            // 展開所有
            zTreeObj.expandAll(true);
            var node = null;
            var childrenLength = null;
            var child = null;
            for(var i = 0; i < data.content.length; i++) {
                if(data.content[i].checked == 'checked') { // 如果父節點為選中
                    node = zTreeObj.getNodeByParam("id", data.content[i].id);
                    // node.chkDisabled = true;
                    childrenLength = data.content[i].children.length;
                    for(var j = 0; j < childrenLength; j++) {// 如果子節點為選中
                        child = data.content[i].children[j];
                        if(child.checked == 'checked'){
                            node = zTreeObj.getNodeByParam("id", child.id);
                            zTreeObj.setChkDisabled(node, true);   
                        }
                    }
                }
            }
        }
    }, function (data) {
    });
    ajax.start();

6.3 展開所有

zTreeObj.expandAll(true);

6.4 禁用節點操作

zTreeObj.setChkDisabled(node, true);   

6.5 根據節點屬性值獲取節點

node = zTreeObj.getNodeByParam("id", data.content[i].id);

6.6 設定父節點、子節點級聯

setting.check : {
                 enable: true,// 顯示多選框
                     autoCheckTrigger: false,
                    chkboxType: { "Y": "ps", "N": "ps" }   
            }  

6.7 設定後臺資料對應

用於後臺封裝的物件屬性值與預設的zTree屬性值不一致的情況。

setting. data: {
                key: {
                    name: 'text',
                    checked: 'checked',
                    open: 'state'
                },
                simpleData: {
                    enable: true,
                    idKey: 'id',
                    pIdKey: 'pid'
                }
            },

6.8 設定zTree字型樣式

setting.view: {
                showIcon: false,  //隱藏icon
                dblClickExpand: false,//雙擊節點時,是否自動展開父節點的標識
                showLine: true,//是否顯示節點之間的連線
                fontCss:{'color': '#33445D', 'font-family': 'Microsoft YaHei UI'},//字型樣式函式
                selectedMulti: true //設定是否允許同時選中多個節點
            },

6.9 設定節點為選中

zTree.selectNode(node, true);

6.10 預設選中第一行

    // 結果列表初始化
    var defaultColunms = ViolationEntry.initColumn();
    _this.table = new BSTable(ViolationEntry.id, "/violation/list", defaultColunms,
        {
            pageSize:_this.pageSize,
            onLoadSuccess: function (data) {
                if(data.rows.length > 0){
                    // 預設選中第一行
                    changeImgMovie(data.rows[0].violationXh);
                }
                _this.total_until = _this.table.getTotal();
                _this.page_num = _this.table.getPageNumber();
                _this.total_page = _this.table.getTotalPage();
                _this.order_filed = _this.table.getOrderField();
                _this.sort_order = _this.table.getSortOrder();
            }
        });
    _this.table.setPaginationType("server");
    _this.table.setQueryParams(ViolationEntry.param());
    _this.table.init();

參考連結: