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

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

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

3、设置setting

  1. var setting = {
  2. data: {
  3. simpleData: {
  4. enable: true,
  5. idKey: "id",
  6. pIdKey: "parentId",
  7. rootPId: -
  8. },
  9. key: {
  10. url: "nourl",
  11. name: "fieldName"
  12. }
  13. },
  14. check: {
  15. nocheckInherit: true
  16. },
  17. callback: {
  18. // 树的点击事件
  19. onClick: zTreeOnClick,
  20. // 拖拽结束事件
  21. onDrop: zTreeOnDrop
  22. },
  23. // 开启拖拽
  24. edit: {
  25. drag: {
  26. // 打开复制功能,Ctrl+鼠标左键点击后拖拽
  27. isCopy: true,
  28. // 打开移动功能,鼠标左键点击后拖拽
  29. isMove: true
  30. },
  31. // 打开编辑
  32. enable: true,
  33. // 关闭删除
  34. showRemoveBtn: false,
  35. // 关闭修改名称
  36. showRenameBtn: false
  37. }
  38. };

4、拖拽后函数

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

5、详解拖拽函数

  1. // 全局变量,用于储存ztree集合
  2. var ztreeList;
  3. // 全局变量,用于储存最大id,是复制时使用,通过传参数不方便,用全局变量最好
  4. var copyNodeMaxIndex;
  5. //拖拽
  6. function zTreeOnDrop (event, treeId, treeNodes, targetNode, moveType, isCopy){
  7. // 复制
  8. if(isCopy) {
  9. for(var i = 0; i < ztreeList.length; i++) {
  10. // 遍历ztree集合,找到根节点,拿到储存最大id,然后设置全局变量。说明:这里只是方便拿最大值id,放到那里都行
  11. if("0" == ztreeList[i]['id']) {
  12. copyNodeMaxIndex = ztreeList[i]['maxIndex'];
  13. var temp = ztreeList[i];
  14. // 调用复制节点集合到ztree集合,同时改变id和parentId
  15. copyNodesToArray(treeNodes, targetNode['id'], true);
  16. // 全局变量最大id放回根节点储存,将储存到数据库
  17. temp['maxIndex'] = copyNodeMaxIndex;
  18. // 根节点替换
  19. ztreeList.splice(i, 1, temp);
  20. }
  21. }
  22. } else {
  23. // 移动,设置选中的节点集合【不包括子节点】的父节点为目标节点id
  24. for(i in treeNodes) {
  25. for(j in ztreeList) {
  26. if(treeNodes[i]['id'] == ztreeList[j]['id']) {
  27. ztreeList[j]['parentId'] = targetNode['id'];
  28. break;
  29. }
  30. }
  31. }
  32. }
  33. // 重新加载ztree
  34. $.fn.zTree.init($("#ztree"), setting, ztreeList);
  35. }
  36.  
  37. /**
  38. * 复制节点集合到全局变量ztree集合,同时改变id和parentId
  39. * @param nodes
  40. * @param parentId
  41. * @param flag
  42. */
  43. function copyNodesToArray(nodes, parentId, flag) {
  44. // 循环节点集合
  45. for(i in nodes) {
  46. var node = nodes[i];
  47. var children = node.children;
  48. copyNodeMaxIndex++;
  49. node['id'] = copyNodeMaxIndex;
  50. node['parentId'] = parentId;
  51. if(flag) {
  52. node['fieldName'] = node['fieldName'] + "[副本]";
  53. }
  54. // 这里一定设置子节点为未定义,不然会复制双份
  55. node.children = undefined;
  56. // 添加节点到全局ztree集合,不包括子节点,只是复制节点本身
  57. ztreeList.push(node);
  58. if(2 == isOnlyChildren(children)) {
  59. // 返回2表示节点集合除了本身外还有子节点,那么久让它递归添加到全局ztree集合里
  60. copyNodesToArray(children, node['id'], false);
  61. } else if(1 == isOnlyChildren(children)) {
  62. // 返回1表示这节点集合除了本身外没有子节点,那么直接遍历子节点集合,设置id和parentId并添加到全局ztree集合里
  63. for(j in children) {
  64. copyNodeMaxIndex++;
  65. children[j]['id'] = copyNodeMaxIndex;
  66. children[j]['parentId'] = node['id'];
  67. ztreeList.push(children[j]);
  68. }
  69. }
  70. //返回0表示这节点集合不存在,那么就没有可处理了,上面已经处理了节点本身
  71. }
  72. }
  73.  
  74. /**
  75. * 判断节点集合是有多少级子节点。返回0表示这节点集合不存在,返回1表示这节点集合除了本身外没有子节点,返回2表示节点集合除了本身外还有子节点
  76. * @param children
  77. * @returns {number}
  78. */
  79. function isOnlyChildren(children) {
  80. if(undefined != children && children.length > 0) {
  81. for(i in children) {
  82. var children1 = children[i].children;
  83. if(undefined != children1 && children1.length > 0) {
  84. return 2;
  85. }
  86. }
  87. return 1
  88. }
  89. return 0;
  90. }

6、效果

移动1

移动2

结果

测试复制

复制1

复制2

复制结果

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

  1.  

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. Mybatis框架-Delete节点元素的使用

    这个就也比较简单,需求:将我们最新插入的那条数据删除掉,从用户表中. UserMapper.xml UserMapper.java 编写测试方法: @Test public void testDele ...

  2. BBS总结 --- django设计

    目录 1.调用模块使用 2.BBS中urls.py 3.django中配置 4.新学方法使用 5.BBS用到的知识点 1.调用模块使用 from django.db import models fro ...

  3. nginx 添加用户认证

    nginx 添加用户认证  nginx 配置文件添加: 配置代理添加用户认证:server {   listen       ;   server_name localhost;   location ...

  4. 获取页面scroll高度

    记录一下获取 scroll 高度的方法 经实际测试: document.body.scrollTop 在 chrome 下会返回0. 所以 document.documentElement.scrol ...

  5. GUI引发的一场脑部大战|wine、wsl、mono、gtk、qt

    没写完不想写了,先发布吧,这就是一个引子. 在春天种下一颗种子---- GUI引发的一场脑部大战|wine.wsl.mono.gtk.qt 思路开拓了,方法一下子就来了 wine可以运行大部分Wind ...

  6. JavaScript对象及面向对象

    1.创建对象(1)自定义对象   语法:var 对象名称=new Object();(2)内置对象   String(字符串)对象.   Date(对象)对象   Array(数组)对象   Boll ...

  7. ranger整合kerberos

    一.生成主体 在kerberos服务器生成用于ranger的用户主体: # kadmin.local addprinc -randkey HTTP/manager1@HADOOP.COM addpri ...

  8. [总结] MSF攻击数据库服务

    0x01 攻击Mysql服务 1.1 目标探测 auxiliary/scanner/mysql/mysql_version 常用于内网中的批量mysql主机发现: 1.2 爆破登录 auxiliary ...

  9. js注册表单中实现地区选择效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. DELPHI7 ADO二层升三层新增LINUX服务器方案

    DELPHI7 ADO二层升三层新增LINUX服务器方案 引子:笔者曾经无数次在用户的LINUX服务器上创建一个WINDOWS虚拟机,用于运行自己DELPHI开发中间件. 现在再不需要如此麻烦了. 咏 ...