ztree实现拖拽移动和复制
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实现拖拽移动和复制的更多相关文章
- zTree的拖拽排序
ztree本身是可以支持拖拽的,但是却没有找到明确的支持拖拽的排序,也就是说,在拖拽过程中,需要自定义维护拖拽后的顺序并保存至后台. 在这样一个比较常规的需求情况下,网上也有朋友给出了一些解决方案,比 ...
- kali安装vmtool后依旧无法拖拽文件,复制粘贴,解决办法
本文链接:https://blog.csdn.net/Key_book/article/details/80310235命令行下 执行 apt-get install open-vm-tools-de ...
- 爱上MVC3~MVC+ZTree实现对树的CURD及拖拽操作
回到目录 上一讲中,我们学习了如何使用zTree对一棵大树(大数据量的树型结构的数据表,呵呵,名称有点绕,但说的是事实)进行异步加载,今天这讲,我们来说说,如何去操作这棵大树,无非就是添加子节点,删除 ...
- MVC小系列(十五)【MVC+ZTree实现对树的CURD及拖拽操作】
根据上一讲的可以加载一棵大树,这讲讲下如果操作这颗大树 <link href="../../Scripts/JQuery-zTree/css/zTreeStyle/zTreeStyle ...
- MVC+ZTree实现对树的CURD及拖拽操作
上一讲中,我们学习了如何使用zTree对一棵大树(大数据量的树型结构的数据表,呵呵,名称有点绕,但说的是事实)进行异步加载,今天这讲,我们来说说,如何去操作这棵大树,无非就是添加子节点,删除节点,编辑 ...
- 通过Ztree生成页面html元素Dom树,以及拖拽改变元素的位置
zTree 是一款依靠 jQuery 实现的多功能 "树插件",http://www.treejs.cn/v3/main.php#_zTreeInfo,功能强大,不多赘述. 下面我 ...
- Html5拖拽复制
拖拽是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖拽是标准的一部分,任何元素都能够拖拽. Html5拖拽非常常见的一个功能,但是大部分拖拽的案例都是一个剪切的过程, 项目中需 ...
- ztree使用系列四(ztree实现同级拖拽排序并将排序结果保存数据库)
ztree这个系列的最后一篇,也是ztree功能强大的体现之中的一个--排序功能. ztree能够实现全部节点之间任意的拖拽排序功能.我这里依据须要实现了仅仅同意同级之间任意拖拽排序,事实上原理都一样 ...
- Ubuntu 无法拖拽复制
首先确定 在ubuntu 下,vmware tools 已经安装成功 有些时候会出现vmware tools 已经安装成功,但是却无法实现拖拽和复制 1.首先在虚拟机设置里面勾选共享剪切板 2.然后重 ...
随机推荐
- Mybatis框架-Delete节点元素的使用
这个就也比较简单,需求:将我们最新插入的那条数据删除掉,从用户表中. UserMapper.xml UserMapper.java 编写测试方法: @Test public void testDele ...
- BBS总结 --- django设计
目录 1.调用模块使用 2.BBS中urls.py 3.django中配置 4.新学方法使用 5.BBS用到的知识点 1.调用模块使用 from django.db import models fro ...
- nginx 添加用户认证
nginx 添加用户认证 nginx 配置文件添加: 配置代理添加用户认证:server { listen ; server_name localhost; location ...
- 获取页面scroll高度
记录一下获取 scroll 高度的方法 经实际测试: document.body.scrollTop 在 chrome 下会返回0. 所以 document.documentElement.scrol ...
- GUI引发的一场脑部大战|wine、wsl、mono、gtk、qt
没写完不想写了,先发布吧,这就是一个引子. 在春天种下一颗种子---- GUI引发的一场脑部大战|wine.wsl.mono.gtk.qt 思路开拓了,方法一下子就来了 wine可以运行大部分Wind ...
- JavaScript对象及面向对象
1.创建对象(1)自定义对象 语法:var 对象名称=new Object();(2)内置对象 String(字符串)对象. Date(对象)对象 Array(数组)对象 Boll ...
- ranger整合kerberos
一.生成主体 在kerberos服务器生成用于ranger的用户主体: # kadmin.local addprinc -randkey HTTP/manager1@HADOOP.COM addpri ...
- [总结] MSF攻击数据库服务
0x01 攻击Mysql服务 1.1 目标探测 auxiliary/scanner/mysql/mysql_version 常用于内网中的批量mysql主机发现: 1.2 爆破登录 auxiliary ...
- js注册表单中实现地区选择效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- DELPHI7 ADO二层升三层新增LINUX服务器方案
DELPHI7 ADO二层升三层新增LINUX服务器方案 引子:笔者曾经无数次在用户的LINUX服务器上创建一个WINDOWS虚拟机,用于运行自己DELPHI开发中间件. 现在再不需要如此麻烦了. 咏 ...