ztree入门应用总结

45 篇文章 0 订阅


http://www.cnblogs.com/liaidai/p/4739417.html


以前用到过ZTREE做树形展示,当时没有总结,今天简单总结一下,以后用的时候也好找,废话不多说,下面开始。

1、ztree简介

  ztree是依靠jquery实现的一个树形插件,是一个开源的插件,兼容IE/FF/CHROM/OPERA这些常用的浏览器,支持JSON数据以及AJAX异步加载节点数据,提供多种事件回调函数,其实说了一大堆就是想说一句话,这是个比较好用的树形结构展示插件。

2、使用

2.0 项目环境

2.0.1 数据库表

 

2.1 引入的文件

2.1.1 JS文件

a. jquery-1.4.2.js 或其他更高版本的 jQuery ;

b. jquery-ztree.core-3.0.js,如果需要用到编辑功能 或 checkbox / radio 还需要分别加载 jquery-ztree.exedit-3.0.js 和 jquery-ztree.excheck-3.0.js; 
c.根据需求添加其他JS文件。

2.1.2 CSS文件

a. zTreeStyle.css;

b. zTreeStyle 目录下的 img 文件;

c.根据需求引入其他CSS文件;

2.2 初始化

2.2.1 页面

  在页面上需要有一个承载tree的容器,并且要设置该容器的className为ztree,如下所示:

<ul id="tree" class="ztree"></ul>

  ztree" 这个 className,可以根据需要随意修改,别忘了修改 css 中对应名字就是了,对于容器如果需要增加其他特殊样式,可根据自己的需要进行修改。

2.2.2 JS初始化

$.fn.zTree.init($("#tree"), setting);

  init方法中可以有三个参数,第一个参数表示tree的承载容器对象,第二个参数表示ztree的配置数据,也就是初始化参数,第三个参数zNodes表示ztree的节点数据,因为在本文中使用异步加载的方式加载数据,因此第三个参数为空。

  此方法的返回值即为ztree对象,提供操作ztree的各种方法,对于通过js操作ztree来说必须通过此对象,如果没有设置的话,可以使用 $.fn.zTree.getZTreeObj方法随时获取,获取方式为:

treeObj = $.fn.zTree.getZTreeObj("tree");

2.2.3 setting设置

2.2.3.1 async
复制代码
async : {
        enable : true,
        url : asyncURL,
        type : "post",
        dataType : "text",
        autoParam : ["id=pid"],
//        otherParam : ["type"],
        dataFilter : toArray
    },
复制代码

  async表示异步加载时需要向后台传递的参数。

  enable:设置ztree是否开启异步加载模式,布尔类型,默认为false;如果设置为 true,请务必设置 setting.async 内的其它参数。如果需要根节点也异步加载,初始化时 treeNodes 参数设置为 null 即可。

  url:Ajax 获取数据的 URL 地址;enable为true时生效;url 内也可以带参数,这些参数就只能是通过 get 方式提交了,并且请注意进行转码;

  type:ajax的http请求模式,默认值为post;

  dataType :Ajax 获取的数据类型;

  autoParam:异步加载时需要自动提交父节点属性的参数,默认为[],将需要作为参数提交的属性名称,制作成 Array 即可,例如:["id", "name"],可以设置提交时的参数名称,例如 server 只接受 zId : ["id=zId"];

  dataFilter :用于对 Ajax 返回数据进行预处理的函数,返回值是 zTree 支持的JSON 数据结构即可。

复制代码
/**
 * transfer the post data to array adapted to displaying the zTree
 * 将异步过来的JSON数据,进行处理,符合Ztree的显示
 */
function toArray (treeId, pNode, datas) {
    if(!datas || datas.length == 0){
        //alert("no datas");
        return null;
    }
    var len = datas.length;
    var array = new Array();
    for(var i = 0; i < len; i++){
        if(datas[i].type != "f"){
            datas[i].isParent = true;
        }
        if(pNode){
            datas[i].checked = datas[i].checked || pNode.checked;
        }
        array.push(datas[i]);
    }
    return array;
}
复制代码

  此函数的三个参数,treeId对应ztree的treeid,pNode表示进行异步加载的父节点json数据对象,对根进行异步加载时,pNode = null,datas表示异步加载获取到的数据转换后的Array(JSON)、JSON、String数据对象。

 

2.2.3.1.1 后台代码
复制代码
private Integer pid;

public String getChildren(){
        if(pid == null){
            pid = SessionUtils.getCurrentRequireFromSession(request).getId();
        }
        List<SystemModule> list = nodeService.getNodeChildren(pid);
        String json = new Gson().toJson(list);
        
        try {
            response.setContentType("text/plain");
            response.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();
            out.print(json);
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return null;
    }
复制代码
2.2.3.2 check
复制代码
/*outlook style should not include the check, you mustn't set the check configuration outLook 风格不能有check选择的配置,否则会有左侧按钮的重叠*/
    check : {
        autoCheckTrigger : false, // automatically trigger the check functions: beforeCheck and onCheck
        chkboxType : {"Y" : "ps","N" : "ps"},
        chkStyle : "checkbox",
        enable : true,
        nocheckInherit : false,
        chkDisabledInherit : false,
        radioType : "level"
    },
复制代码

  chkboxType:勾选 checkbox 对于父子节点的关联关系,setting.check.enable = true 且 setting.check.chkStyle = "checkbox" 时生效;Y 属性定义 checkbox 被勾选后的情况,N 属性定义 checkbox 取消勾选后的情况,"p" 表示操作会影响父级节点,"s" 表示操作会影响子级节点,注意大小写,改变后出错。

  autoCheckTrigger:设置自动关联勾选时是否触发 beforeCheck / onCheck 事件回调函数,这里设置为不触发;

  chkStyle:表示勾选框类型,checkbox或者radio,默认为checkbox,此时显示 checkbox 选择框,setting.check.chkboxType 属性有效;chkStyle = "radio" 时,显示 radio 选择框, setting.check.radioType 属性有效。注意大小写。

  enable:设置 zTree 的节点上是否显示 checkbox / radio,默认值为false;

  nocheckInherit:当父节点设置 nocheck = true 时,设置子节点是否自动继承 nocheck = true;true 表示 新加入子节点时,自动继承父节点 nocheck = true 的属性。false 表示 新加入子节点时,不继承父节点 nocheck 的属性。默认值为false;

  chkDisabledInherit:当父节点设置 chkDisabled = true 时,设置子节点是否自动继承 chkDisabled = true

  radioType:radio 的分组范围,默认为level,radioType = "level" 时,在每一级节点范围内当做一个分组,radioType = "all" 时,在整棵树范围内当做一个分组.

  标红色的两个必须设置,其他的根据需要设置即可。

 

2.2.3.3 view
复制代码
view: {
//        addDiyDom : outLookStyle,
//        addHoverDom: addHoverDom,// mouse float
//        removeHoverDom: removeHoverDom,// mouse float
        autoCancelSelected : false,
        dblClickExpand : true,
//        expandSpeed : "slow",// tree expand speed
        fontCss : setFontCss,
//        nameIsHTML : false,
        selectedMulti: false,
        showIcon : false,
        showLine : false,
        showTitle : false,
        txtSelectedEnable : true
    },
复制代码

  上面注掉的是暂时用不到的,如果想用的话可以自己查一下API加上即可,主要介绍一下没有注掉的那些功能:

autoCancelSelected :点击节点时,按下 Ctrl 或 Cmd 键是否允许取消选择操作。其实我也没感觉有什么用,默认值为true,如果不需要此功能可以设置为false,此处设置为false;
dblClickExpand :双击节点时,是否自动展开父节点的标识,boolean类型,默认为true;什么意思呢,其实就是如果一个节点有下级节点,双击此节点时,如果是展开的,那么会折叠,反之亦然;
fontCss :个性化文字样式,只针对 zTree 在节点上显示的<A>对象。默认值为{},JSON 格式为 JQuery css方法中的 JSON 对象格式,例如:{color:"#ff0011", background:"blue"},此处可以使用函数来设置:
复制代码
/** set the CSS style for every different node
 * 为每一个节点设置不同的CSS样式 
 * @param treeId
 * @param treeNode
 */
var cssJson = {color:"red"};
function setFontCss(treeId, treeNode) {
    if(treeNode.level == 0){
        cssJson.color = "red";
    } else if(treeNode.level == 1){
        cssJson.color = "blue";
    } else if(treeNode.level == 2){
        cssJson.color = "green";
    } else {
        cssJson.color = "red";
    }
    return cssJson;
};
复制代码

  selectedMulti:设置是否允许同时选中多个节点。默认值为true,设置为 true时,按下 Ctrl 或 Cmd 键可以选中多个节点,此处禁用;

  showIcon:设置 zTree 是否显示节点的图标。默认为true,这里为了追求简单就没有加ICON,喜欢的同学可以自己加上去,也可以使用函数设置ICON,返回值是布尔类型的;

  showLine:设置 zTree 是否显示节点之间的连线。默认值为true,显示节点之间的连线;

  showTitle:设置 zTree 是否显示节点的 title 提示信息(即节点 DOM 的 title 属性)。请务必与 setting.data.key.title 同时使用。默认值:true,不需要显示提示信息的话就无视吧;

  txtSelectedEnable:设置 zTree 是否允许可以选择 zTree DOM 内的文本。默认为false;

2.2.3.4 data
复制代码
data: {
        keep : {
            leaf : true,// children lock
            parent : true// parent lock
        },
        key : {
            children : "child",
            name : "name",
            title : "ufp",
        },
        simpleData: {
            enable: true
        }
    },
复制代码

  leaf:zTree 的节点叶子节点属性锁,是否始终保持 isParent = false,默认为false,如果设置为 true,则所有 isParent = false 的节点,都无法添加子节点。什么意思呢,意思就是只要你是孙子,一辈子都是孙子,什么时候你也变不成老子,就是这样;

  parent:zTree 的节点父节点属性锁,是否始终保持 isParent = true,跟上边意思差不多;

  children:zTree 节点数据中保存子节点数据的属性名称。

  name:zTree 节点数据保存节点名称的属性名称。默认值是name;

  title:zTree 节点数据保存节点提示信息的属性名称。如果设置为 "" ,则自动与 setting.data.key.name 保持一致,避免用户反复设置,,默认值是"";[setting.view.showTitle = true 时生效]

  enable:确定 zTree 初始化时的节点数据、异步加载时的节点数据、或 addNodes 方法中输入的 newNodes 数据是否采用简单数据模式 (Array),不需要用户再把数据库中取出的 List 强行转换为复杂的 JSON 嵌套格式,默认值:false,如果设置为 true,请务必设置 setting.data.simpleData 内的其他参数: idKey / pIdKey / rootPId,并且让数据满足父子关系。

  2.2.3.5 edit
复制代码
edit : {
        enable : true,
        showRemoveBtn : false,
        showRenameBtn : false,
        drag : {
            isCopy : true,
            isMove : false,
            prev : true,
            inner : true,
            next : true,
        },
    },
复制代码

  enable:设置 zTree 是否处于编辑状态,请在初始化之前设置,初始化后需要改变编辑状态请使用 zTreeObj.setEditable() 方法,默认值: false;点击节点时,不会打开 node.url 指定的 URL;全面支持 编辑 与 异步加载 状态共存;可以对节点进行拖拽,且支持多棵树之间进行拖拽;支持拖拽时 复制/移动 节点;可以通过编辑按钮修改 name 属性;可以通过删除按钮删除节点。

  showRemoveBtn:设置是否显示删除按钮,默认值:true;当点击某节点的删除按钮时:

    1、首先触发 setting.callback.beforeRemove 回调函数,用户可判定是否进行删除操作。

    2、如果未设置 beforeRemove 或 beforeRemove 返回 true,则删除节点并触发setting.callback.onRemove 回调函数。

  showRenameBtn:设置是否显示编辑名称按钮,默认值:true;

  drag:拖拽时的属性;

  isCopy:拖拽时, 设置是否允许复制节点;

  isMove:拖拽时, 设置是否允许移动节点;

    1、isCopy = true; isMove = true 时,拖拽节点按下 Ctrl 或 Cmd 键表示 copy; 否则为 move

    2、isCopy = true; isMove = false 时,所有拖拽操作都是 copy

    3、isCopy = false; isMove = true 时,所有拖拽操作都是 move

    4、isCopy = false; isMove = false 时,禁止拖拽操作


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值