zTree is an advanced jQuery ‘tree plug-in’. The performance is excellent, it is easy to configurw (with a full set of options), and has many advanced features (that usually only come with paid software).
zTree is open source and uses the MIT license.
树形结构数据创建 zTree
树的父子关系使用节点的 children 数组来建立。
1 |
|
数组结构数据创建 zTree
数据库表中树形结构的存储一般都是通过 parentId 来建立数据之间的父子关系,zTree 也可以使用数组结构的数据,通过 parentId 来建立树节点之间的父子关系,需要设置 setting.data.simpleData 的属性来启用这种创建方式。
1 |
|
顶级节点(根节点)的 parentId 不一定要是 0,只要不是它的任意后代节点的 id 就可以,但是为了规范,最好还是定义一个根节点的 id。一般数据库的 id 都是从 1 开始,所以顶级节点的 parentId 都会设置为 0。
zTree 允许存在多个根节点。
增删拖拽重命名
为了能够对 zTree 进行编辑,需要设置 setting.edit.enable 为 true,下面演示的功能有:
- 增加新的节点:
tree.addNodes(parentNode, index, newNodes, false)
,最后参数 false 表示展开 - 删除选中的节点: 删除前在回调函数 beforeRemove() 中先询问是否删除
- 重命名选中的节点: 重命名前在回调函数 beforeRename() 中先确定是否真的能够重命名
- 拖拽移动节点: 在 beforeDrop() 得不到新 parentId,所以需要去 onDrop() 中处理
- 取得选中的节点: tree.getSelectedNodes()
1 |
|
数据操作
- 自定义的属性都会保存到 zTree 节点的数据中,也可以使用节点对象获取自定义属性
- isParent 决定一个节点是否以非叶子节点显示和操作,和节点下是否有子节点数据无关
- 修改节点 DOM 相关的数据后需要调用 zTree.updateNode() 更新节点
- 可以对节点的点击事件绑定回调函数
1 |
|
Ajax 加载节点数据
很多时候节点的数据并不是一次就全部准备好的,而是在展开非叶节点时使用 Ajax 去服务器端请求它的子节点,此时需要配置 setting.async:
- url: 请求的 URL
- dataFilter: 得到服务器响应时的回调函数,可以在此函数中对响应的数据进行处理。例如 Java Bean 中 boolean 属性名不要以 is 作为前缀,但是 zTree 使用属性 isParent 表示非叶子结点,所以在回调函数对服务器响应的数据进行处理是有必要的。
1 |
|
服务器端 TreeNode:
1 | package com.xtuer.bean; |
服务器端 Controller:
1 |
|
响应数据 JSON 格式:
1 | [{ |