1、官网下载ztree:http://www.treejs.cn/v3/api.php

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

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

3、设置setting

var setting = {
data: {
simpleData: {
enable: true,
idKey: "id",
pIdKey: "parentId",
rootPId: -
},
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的id
treeNodes:拖拽所选中的节点集合,可以多选
targetNode:拖拽目标节点,可以通过这个函数,设置treeNodes的所有id为targetNode['parentId'],然后重新加载ztree
moveType:移动类型,上移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

复制结果

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

												

ztree实现拖拽移动和复制的更多相关文章

  1. zTree的拖拽排序

    ztree本身是可以支持拖拽的,但是却没有找到明确的支持拖拽的排序,也就是说,在拖拽过程中,需要自定义维护拖拽后的顺序并保存至后台. 在这样一个比较常规的需求情况下,网上也有朋友给出了一些解决方案,比 ...

  2. kali安装vmtool后依旧无法拖拽文件,复制粘贴,解决办法

    本文链接:https://blog.csdn.net/Key_book/article/details/80310235命令行下 执行 apt-get install open-vm-tools-de ...

  3. 爱上MVC3~MVC+ZTree实现对树的CURD及拖拽操作

    回到目录 上一讲中,我们学习了如何使用zTree对一棵大树(大数据量的树型结构的数据表,呵呵,名称有点绕,但说的是事实)进行异步加载,今天这讲,我们来说说,如何去操作这棵大树,无非就是添加子节点,删除 ...

  4. MVC小系列(十五)【MVC+ZTree实现对树的CURD及拖拽操作】

    根据上一讲的可以加载一棵大树,这讲讲下如果操作这颗大树 <link href="../../Scripts/JQuery-zTree/css/zTreeStyle/zTreeStyle ...

  5. MVC+ZTree实现对树的CURD及拖拽操作

    上一讲中,我们学习了如何使用zTree对一棵大树(大数据量的树型结构的数据表,呵呵,名称有点绕,但说的是事实)进行异步加载,今天这讲,我们来说说,如何去操作这棵大树,无非就是添加子节点,删除节点,编辑 ...

  6. 通过Ztree生成页面html元素Dom树,以及拖拽改变元素的位置

    zTree 是一款依靠 jQuery 实现的多功能 "树插件",http://www.treejs.cn/v3/main.php#_zTreeInfo,功能强大,不多赘述. 下面我 ...

  7. Html5拖拽复制

    拖拽是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖拽是标准的一部分,任何元素都能够拖拽. Html5拖拽非常常见的一个功能,但是大部分拖拽的案例都是一个剪切的过程, 项目中需 ...

  8. ztree使用系列四(ztree实现同级拖拽排序并将排序结果保存数据库)

    ztree这个系列的最后一篇,也是ztree功能强大的体现之中的一个--排序功能. ztree能够实现全部节点之间任意的拖拽排序功能.我这里依据须要实现了仅仅同意同级之间任意拖拽排序,事实上原理都一样 ...

  9. Ubuntu 无法拖拽复制

    首先确定 在ubuntu 下,vmware tools 已经安装成功 有些时候会出现vmware tools 已经安装成功,但是却无法实现拖拽和复制 1.首先在虚拟机设置里面勾选共享剪切板 2.然后重 ...

随机推荐

  1. SQL SERVER错误:已超过了锁请求超时时段。

    问题:远程连接数据库,无法打开视图,报错:SQL SERVER错误:已超过了锁请求超时时段. (Microsoft SQL Server,错误: 1222) 执行语句获取进程id select * f ...

  2. CCPC-Wannafly Summer Camp 2019 Day1

    A - Jzzhu and Cities CodeForces - 449B 题意:n座城市,m条路,k条铁路啥的吧,然后要求最多能删多少条铁路保持1到$n$的最短路不变. 思路:因为铁路是从1出发的 ...

  3. L1443

    一,看题 1,题不难,但是这个马怎么走,着实搞懵我了. 2,转过去就发现,其实变一下dx,dy就ok. 3,除了输出外似乎也没什么坑. 4,其实也是有的,这个步数也是... 5,作为一道提高-的搜索题 ...

  4. HBase 基本入门篇

    无论是 NoSQL,还是大数据领域,HBase 都是非常”炙热”的一门数据库.本文将对 HBase 做一些基础性的介绍,旨在入门. 一.简介 HBase 是一个开源的.面向列的非关系型分布式数据库,目 ...

  5. 使用singer 转换gitbase 数据到postgresql

    gitbase 是mysql server 的一个实现(主要是用来分析git仓库代码),但是里面好多功能可能并不是很强大(sql 的限制) 我们可以通过singer 的tap-mysql 将数据抽取到 ...

  6. 13-ESP8266 SDK开发基础入门篇--上位机串口控制 Wi-Fi输出PWM的占空比,IEEE754规约

    https://www.cnblogs.com/yangfengwu/p/11100552.html 这节做个上位机控制Wi-Fi引脚输出的PWM占空比信号,灯的亮度就可以用上位机控制了 大家可以自己 ...

  7. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn 题解

    P2701 [USACO5.3]巨大的牛棚Big Barn 题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他 ...

  8. 第03组 团队git现场编程实战

    1.组员职责分工 张逸杰:复制监督整个编程任务的进程以及协助组员编程 黄智锋.刘汪洋:负责UI设计 苏凯婷.鲍冰如:爬取数据并负责测评出福州最受欢迎的商圈 陈荣杰.杨锦镔:爬取数据并负责测评出福州人均 ...

  9. 【JZOJ6206】【20190610】二分图边染色

    题目 ​ 对一个二分图的边染色,满足有相同端点的边的颜色一定不同; ​ 设最优染色为\(C\) ,你的染色为\(X\),只需要满足$ X \le 2^ {\lceil log  C \rceil }$ ...

  10. Git bash Error: Could not fork child process: There are no available terminals (-1)

    错误信息:Error: Could not fork child process: There are no available terminals (-1) 截图如下: 解决办法: (1)使用cmd ...