博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ztree实现拖拽移动和复制
阅读量:5216 次
发布时间:2019-06-14

本文共 3871 字,大约阅读时间需要 12 分钟。

1、官网下载ztree:

2、引入jquery.ztree.all.min.js

注意,这是基于jQuery的插件,请引入相关js

3、设置setting

var setting = {    data: {        simpleData: {            enable: true,            idKey: "id",            pIdKey: "parentId",            rootPId: -1        },        key: {            url: "nourl",            name: "fieldName"        }    },    check: {        nocheckInherit: true    },    callback: {        // 树的点击事件        onClick: zTreeOnClick,        // 拖拽结束事件        onDrop: zTreeOnDrop    },    // 开启拖拽    edit: {        drag: {            // 打开复制功能,Ctrl+鼠标左键点击后拖拽            isCopy: true,            // 打开移动功能,鼠标左键点击后拖拽            isMove: true        },        // 打开编辑        enable: true,        // 关闭删除        showRemoveBtn: false,        // 关闭修改名称        showRenameBtn: false    }};

 

4、拖拽后函数

function zTreeOnDrop (event, treeId, treeNodes, targetNode, moveType, isCopy)treeId:就是html的idtreeNodes:拖拽所选中的节点集合,可以多选targetNode:拖拽目标节点,可以通过这个函数,设置treeNodes的所有id为targetNode['parentId'],然后重新加载ztreemoveType:移动类型,上移prev,下移next,内移inner,感觉用处不大isCopy:是否复制,复制true,移动false

 

5、详解拖拽函数

// 全局变量,用于储存ztree集合var ztreeList;// 全局变量,用于储存最大id,是复制时使用,通过传参数不方便,用全局变量最好var copyNodeMaxIndex;//拖拽function zTreeOnDrop (event, treeId, treeNodes, targetNode, moveType, isCopy){    // 复制    if(isCopy) {        for(var i = 0; i < ztreeList.length; i++) {            // 遍历ztree集合,找到根节点,拿到储存最大id,然后设置全局变量。说明:这里只是方便拿最大值id,放到那里都行            if("0" == ztreeList[i]['id']) {                copyNodeMaxIndex = ztreeList[i]['maxIndex'];                var temp = ztreeList[i];                // 调用复制节点集合到ztree集合,同时改变id和parentId                copyNodesToArray(treeNodes, targetNode['id'], true);                // 全局变量最大id放回根节点储存,将储存到数据库                temp['maxIndex'] = copyNodeMaxIndex;                // 根节点替换                ztreeList.splice(i, 1, temp);            }        }    } else {        // 移动,设置选中的节点集合【不包括子节点】的父节点为目标节点id        for(i in treeNodes) {            for(j in ztreeList) {                if(treeNodes[i]['id'] == ztreeList[j]['id']) {                    ztreeList[j]['parentId'] = targetNode['id'];                    break;                }            }        }    }    // 重新加载ztree    $.fn.zTree.init($("#ztree"), setting, ztreeList);}/** * 复制节点集合到全局变量ztree集合,同时改变id和parentId * @param nodes * @param parentId * @param flag */function copyNodesToArray(nodes, parentId, flag) {    // 循环节点集合    for(i in nodes) {        var node = nodes[i];        var children = node.children;        copyNodeMaxIndex++;        node['id'] = copyNodeMaxIndex;        node['parentId'] = parentId;        if(flag) {            node['fieldName'] = node['fieldName'] + "[副本]";        }        // 这里一定设置子节点为未定义,不然会复制双份        node.children = undefined;        // 添加节点到全局ztree集合,不包括子节点,只是复制节点本身        ztreeList.push(node);        if(2 == isOnlyChildren(children)) {            // 返回2表示节点集合除了本身外还有子节点,那么久让它递归添加到全局ztree集合里            copyNodesToArray(children, node['id'], false);        } else if(1 == isOnlyChildren(children)) {            // 返回1表示这节点集合除了本身外没有子节点,那么直接遍历子节点集合,设置id和parentId并添加到全局ztree集合里            for(j in children) {                copyNodeMaxIndex++;                children[j]['id'] = copyNodeMaxIndex;                children[j]['parentId'] = node['id'];                ztreeList.push(children[j]);            }        }        //返回0表示这节点集合不存在,那么就没有可处理了,上面已经处理了节点本身    }}/** * 判断节点集合是有多少级子节点。返回0表示这节点集合不存在,返回1表示这节点集合除了本身外没有子节点,返回2表示节点集合除了本身外还有子节点 * @param children * @returns {number} */function isOnlyChildren(children) {    if(undefined != children && children.length > 0) {        for(i in children) {            var children1 = children[i].children;            if(undefined != children1 && children1.length > 0) {                return 2;            }        }        return 1    }    return 0;}

 

6、效果

 

 移动1

 

 移动2

 

 结果

 

 

测试复制

 

 复制1

 

 复制2

 

 复制结果

 

 复制多层子节点也是可以得

 

 

 

 

 

转载于:https://www.cnblogs.com/xiaostudy/p/11515574.html

你可能感兴趣的文章
linux set
查看>>
vim lua对齐indent无效
查看>>
Python中的MySQL接口:PyMySQL & MySQLdb
查看>>
输入格式CombineFileInput
查看>>
笔记:mysql 下载与安装
查看>>
CSS3学习笔记
查看>>
数据库复习总结(22)-触发器和游标
查看>>
本地推送UILocalNotification
查看>>
1.汇编指令介绍(arm)
查看>>
在Android中调用C#写的WebService(附源代码)
查看>>
优化 SQL Server CPU 性能
查看>>
一、线性模型
查看>>
动态规划方法总结
查看>>
C语言基础---流程控制-->选择结构
查看>>
php随笔
查看>>
108. Convert Sorted Array to Binary Search Tree
查看>>
数据结构与算法
查看>>
红黑树
查看>>
DIV滚动条
查看>>
YOLOV3 训练WIDER_FACE
查看>>