随笔文档

173 阅读2分钟

ztree基本运用

首先去ztree官网下载好ztree文件

  • 之后你需要在你的项目中引入这些文件
  • 接下来就可以照着官网愉快的写代码了,
  • 首先我们要初始化一个ztree代码如下
<ul id="organizationTree" class="ztree"></ul>
// 注意这里的这个class类名必须要加上去,不然会没有样式这个类名写在了dome.css中,他写了一个默认的样式,你可以对它进行修改
// 初始化树
        $.fn.zTree.init(
            $("#organizationTree"), //这里的id就是你需要写的dom
            setting, // 是一个对象,里面有他的各种设置
            zNodes // 是你的数据,你可以通过ajax请求获取这个数据
        )

  • 下面我们在重点说下这个setting,这个东西比较复杂,涉及到的内容也比较多,我主要说下我项目中用到的方法与属性,我们项目的要求是做一个权限树,要求能添加与勾选,功能不是很复杂,先说下怎么出现勾选

在setting中有一个属性check

  • 它里面有一个属性判断是否出现勾选框enable: true,true是有false是没有
  • 还有一个属性是`chkStyle: "checkbox"默认时checkbox
  • chkboxType: { "Y": "ps", "N": "ps" }Y 属性定义 checkbox 被勾选后的情况; N 属性定义 checkbox 取消勾选后的情况; "p" 表示操作会影响父级节点; "s" 表示操作会影响子级节点。
  • 这是出现勾选框的写法代码如下
check: {
    enable: true,
    chkStyle: "checkbox",
    chkboxType: { "Y": "ps", "N": "ps" }
},

下面就是新增的,新增我没有按照ztree中的方法写,我是在顶部加了一个新增按钮然后调用addNodes方法来实现新增代码如下

function ZtreeNode(id, pId, name) {//定义ztree的节点类
    this.id = id;
    this.pId = pId;
    this.name = name;
}
// 添加角色tree
$('#organizationBtn').on('click',function(){
    if(!$('#organizationHidden').attr('bId')){
        layer.msg('请先选中需要添加的父节点', {icon: 5, time: 3000});
        return false;
    }
    if(!$('#organizationInput').val()){
        layer.msg('请先填写节点名称', {icon: 5, time: 3000});
        return false;
    }
    var zTree = $.fn.zTree.getZTreeObj("organizationTree");
    var orgId = $('#organizationHidden').attr('bId');
    var name = $('#organizationInput').val()//这里是拿到添加节点名字的一个input框
    var parentZNode = zTree.getNodeByParam("id", orgId, null); //获取父节点
    var sonId = orgId*100 + (!!parentZNode.children?parentZNode.children.length:1);
    var childZNode = new ZtreeNode(sonId, orgId, name);
    console.log(childZNode)
    zTree.addNodes(parentZNode, childZNode);//重点代码就这一句,其余的代码只是为了拿到父节点的数据
    $('#organizationInput').val('').hide();
    
})
  • 这里要介绍下setting的下一个属性callback,里面全部是一些回调方法,这里我用到的是onClick
  • 然后在这个方法中拿到父节点的数据,把放在 #organizationBtn中,代码如下
// 角色树点击事件
function zTreeOnClick(event, treeId, treeNode) {
    $('#organizationHidden').attr('bId',treeNode.id);
    $('#organizationInput').show();//这里是让输入节点名称的input框显示出来
};

下面是全部代码

var setting1 = {
    view:{
        dblClickExpand: false,
        showLine: true,
        selectedMulti: false
    },
    data: {
        simpleData: {
            enable: true
        }
    },
    check: {
        enable: true,
        chkStyle: "checkbox",
        chkboxType: { "Y": "ps", "N": "ps" }
    },
    callback: {
        onCheck: onCheck, //选中
        onClick: clickNode
    }
};
var zNodes1 = [
    { id:1, pId:0, name:"父节点 1", open:true},
    { id:11, pId:1, name:"去百度"},
    { id:12, pId:1, name:"叶子节点 1-2"},
    { id:13, pId:1, name:"叶子节点 1-3"},
    { id:2, pId:0, name:"父节点 2", open:true},
    { id:21, pId:2, name:"叶子节点 2-1"},
    { id:22, pId:2, name:"叶子节点 2-2"},
    { id:23, pId:2, name:"叶子节点 2-3"},
    { id:3, pId:0, name:"父节点 3", open:true},
    { id:31, pId:3, name:"叶子节点 3-1"},
    { id:32, pId:3, name:"叶子节点 3-2"},
    { id:33, pId:3, name:"叶子节点 3-3"}
];
// 初始化权限树
$.fn.zTree.init(
    $("#jurisdictionTree"),
    setting1,
    zNodes1
);
// 权限选中函数
function onCheck(e, treeId, treeNode) {
    console.log("id="+treeNode.id+ " ,name="+treeNode.name + " ,pId="+treeNode.pId);
}
// 权限单击函数
function clickNode(e,treeId,treeNode){
    $('#jurisdictionHidden').attr('bId',treeNode.id);
    $('#jurisdictionInput').show();
}
// 添加权限tree
$('#jurisdictionBtn').on('click',function(){
    if(!$('#jurisdictionHidden').attr('bId')){
        layer.msg('请先选中需要添加的父节点', {icon: 5, time: 3000});
        return false;
    }
    if(!$('#jurisdictionInput').val()){
        layer.msg('请先填写节点名称', {icon: 5, time: 3000});
        return false;
    }
    var zTree = $.fn.zTree.getZTreeObj("jurisdictionTree");
    var orgId = $('#jurisdictionHidden').attr('bId');
    var name = $('#jurisdictionInput').val();
    var parentZNode = zTree.getNodeByParam("id", orgId, null); //获取父节点
    var sonId = orgId*100 + (!!parentZNode.children?parentZNode.children.length:1);
    var childZNode = new ZtreeNode(sonId, orgId, name);
    console.log(childZNode)
    zTree.addNodes(parentZNode, childZNode);
    $('#jurisdictionInput').val('').hide();
    // 清楚隐藏域中的选中id
    // $('#jurisdictionHidden').removeAttr('pId').removeAttr('bId');
})
<!--html代码-->
<ul id="jurisdictionTree" class="ztree"></ul>

效果图