因为一个项目的需要,在网上找了点资料,花了两天的时间终于完成了,感谢资料分享的朋友,现在也将自己的实现并结合别人资料整理如下:
1.所需要的准备工作,导入jquery-1.7.2.js,jquery-ztree-2.5.js,zTreeStyle.css,这些东西有需要的朋友可以给我留言;
2.ztree需要的数据格式var
datad=[{"code":"12-10","id":1200001,"name":"资金业务","nodes":[{"code":"12-10-10","id":1200015,"name":"资金划拨策略定义","nodes":[],"privilegeUrl":"/gather/view/v001.jsp","systemModuleID":12},{"code":"12-10-20","id":1200014,"name":"资金上划设置","nodes":[],"privilegeUrl":"/gather/view/v013.jsp","systemModuleID":12},{"code":"12-10-30","id":1200021,"name":"资金下拨设置","nodes":[],"privilegeUrl":"/gather/view/v052.jsp","systemModuleID":12},{"code":"12-10-40","id":1200018,"name":"手动上划","nodes":[],"privilegeUrl":"/gather/view/v030.jsp","systemModuleID":12},{"code":"12-10-50","id":1200022,"name":"手动下拨","nodes":[],"privilegeUrl":"/gather/view/v040.jsp","systemModuleID":12},{"code":"12-10-60","id":1200019,"name":"划拨结果查询","nodes":[],"privilegeUrl":"/gather/view/v060.jsp","systemModuleID":12},{"code":"12-10-70","id":1200017,"name":"银行调账","nodes":[],"privilegeUrl":"/gather/view/v020.jsp","systemModuleID":12}],"privilegeUrl":"","systemModuleID":12}];
3.jsp页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN">
<html>
<head>
<title>选择公告发布单位</title>
<link rel="stylesheet"
href="../zTreeStyle/zTreeStyle.css"
type="text/css">
<script type="text/javascript"
src="../js/jquery-1.7.2.js"></script>
<script type="text/javascript"
src="../js/jquery-ztree-2.5.js"></script>
<style>
TR
{background-color:#FAFAFA;}
body {background-color:
white;margin:1; padding:1;text-align: center;}
div, p, table, th, td
{list-style:none;margin:0;
padding:0;color:#333;font-size:12px;font-family:dotum, Verdana,
Arial, Helvetica, AppleGothic, sans-serif;}
</style>
<script
type="text/javascript">
var datad=[${jsonString}];
var setting = {
checkable:
true
};
//数据右移动
function addRole() {
//移动方法
//右移时Tree1
在第一个参数,Tree2第二个参数
//表示Tree1移动致Tree2
moveTreeNode(Tree1,
Tree2);
}
//数据左移动
function delRole() {
//移动方法
参数相反
moveTreeNode(Tree2,
Tree1);
}
function moveTreeNode(zTree1,
zTree2){
var nodes =
zTree1.getCheckedNodes(); //获取选中需要移动的数据
for(var
i=0;i<nodes.length;i++){ //把选中的数据从根开始一条一条往右添加
var
node = nodes[i];
var
strs={}; //新建一个JSON
格式数据,表示为一个节点,可以是根也可以是叶
strs.id
=node.id;
strs.name=node.name;
strs.code=
node.code;
strs.nodes
= new Array(); //树节点里面有个 nodes
集合,用来存储父子之间的包涵关系
//调用添加方法
//strs
: json 格式..拼装成树的一个节点
//zTree2:
表示需要添加节点的树
zTreeDataAddNode(strs,zTree2);
//获取这个被添加的code
如果是右增加 用来把它从左边移除掉
var
scode = strs.code;
scode
= scode.substring(0, scode.lastIndexOf("-"));
//使用递归移除
移除的时候从叶子开始找 和增加的时候刚好相反
//参数1就是数组最后一个数据
//scode
: 上面截取的code 表示父亲节点
//zTree1
: 需要移除的树,在zTree1 里面移除此对象
zTreeDataDelete(nodes[nodes.length-(i+1)],scode,zTree1);
}
//把选中状态改为未选择
zTree2.checkAllNodes(false);
zTree1.checkAllNodes(false);
//刷新
zTree2.refresh();
zTree1.refresh();
}
//树数据移动方法
function
zTreeDataAddNode(strs,zTree2){
var nodes =
zTree2.transformToArray(zTree2.getNodes()); //获取需要添加数据的树下面所有节点数据
//如果有多个数据需要遍历,找到strs
属于那个父亲节点下面的元素.然后把自己添加进去
if(nodes.length
> 0){
//这个循环判断是否已经存在,true表示不存在可以添加,false存在不能添加
var
isadd=true;
for(var
j=0;j<nodes.length;j++){