jQuery使用zTree插件实现可拖拽的树示例


Posted in jQuery onSeptember 23, 2017

在目前接触到的树插件中,我觉得zTree比较简单,也容易上手。有一次业务需求是将某对象分组树上的对象可以随意拖拽,相当于改变了对象的分组,因此我用到了zTree,对其进行了一些列学习。

 首先下载zTree所需的相关包,附上官方下载连接:zTree下载,引入相关文件后就可以进行zTree的构建了。首先在页面上加ul标签,然后为树加上id,calss为ztree,前端页面就完成了。

注意:下面所有的代码是根据我自己的需求写的,且不完整,主要参考配置流程和回调函数的使用即可。

前端页面:

<ul id="modelTree" class="ztree"></ul>

然后写JavaScript,写之前一定要多多阅读zTree的官方API,上面已经解释的很详细了,只需要照着一步一步做即可。首先就是配置setting,这个是整个zTree的核心配置,我这里除了基本配置外,因为需要拖拽功能,因此配置了edit,其中enable一定要设为true,其他参数看需求配置。callback中也配置相关的回调函数。

 setting配置:

var setting = {
 data: {
  key:{
   name:'nodeName'
  },
  simpleData: {
   enable: true,
   idKey: 'nodeId',
   pIdKey: 'parentNodeId'
  },
  keep:{
   leaf:true,
   parent:true,
  }
 },
 edit:{
  drag:{
   isCopy: false,
   isMove: true,
   prev: true,
   next: true,
   inner: true,
   autoOpenTime: 0,
   minMoveSize: 10


  },
  enable:true,
  editNameSelectAll: true,
  removeTitle: "删除节点",
  renameTitle: "编辑节点名称",
  showRemoveBtn: false,
  showRenameBtn: false,
 },

 callback: {
  beforeClick: beforeClick,

  beforeDrag:beforeDrag,
  beforeDragOpen:beforeDragOpen,
  beforeDrop:beforeDrop,
  onDrag:onDr},
};

 配置完setting,将各个回调函数补充完整,根据需求来定里面的内容,我这里根据父节点的类型以及一些其他一些规则对能否拖拽,拖拽能否成功进行了相应的限制。

 回调函数:

//拖拽之前调用的函数
function beforeDrag(treeId,treeNode){
 if(treeNode[0].nodeType == 'GROUP'){
  return false;
 }
 if(treeNode.parentId == null && treeNode.modelType !=null){
  return true;
 }
 var node = treeNode[0].getParentNode();
 var modelType = treeNode[0].getParentNode().modelType;
 if(modelType == 'INTERFACE'){
  return false;
 }else {
  return true;
 }
}

//预留被拖拽的回调函数
function onDrag(event, treeId, treeNode){
 //暂时没用到
}

//拖拽移动到展开父节点之前调用的函数
function beforeDragOpen(){
 return true;
}

//拖拽操作结束之前调用的函数
function beforeDrop(treeId, treeNode, targetNode, moveType){
 BRS.fileLoading('show');
 var result = false;
 if(targetNode == null || (moveType != "inner" && !targetNode.parentTId)){
  BRS.fileLoading('hide');
  return false;
 }
 if(targetNode.modelType != null){
  if((targetNode.modelType == 'INTERFACE' && moveType == 'inner') || targetNode.getParentNode().modelType == 'INTERFACE'){
   BRS.fileLoading('hide');
   return false;
  }
 }
 var objDetail = {
  url: '/api/model/' + treeNode[0].id,
  async:false,
 }
 jsonAjax(objDetail,function (detailData) {
  var data = {
   nodeType : detailData.nodeType,
   code : detailData.code,
   name : detailData.name,
   builtIn : detailData.builtIn,
   iconUrl : detailData.iconUrl,
   modelType : detailData.modelType.code,
   interfaceModelId : detailData.interfaceModelId,
  };
  data.id = treeNode[0].id;
  if(moveType != 'inner'){
   data.groupId = targetNode.parentId;
  }else{
   data.groupId = targetNode.id;
  }
  var obj = {
   type:"put",
   showSuccessMsg: false,
   param: {
    params:JSON.stringify(data)
   },
   async:false,
   url: '/api/model',
  }
  jsonAjax(obj,function(updateData){
   if(updateData != null){
    result = true;
  ing('hide');
 return result;
}

//预留拖拽结束的回调函数
function onDrop(event, treeId, treeNode, targetNode, moveType){
 befod('hide');
 return result;
}

//预留拖拽结束的回调函数
function onDrop(event, treeId, treeNode, targetNode, moveType){
 beforeClick(treeId, treeNode[0]);
}

上面的设置和相关函数完成以后,就可以调用zTree的初始化方法,通过Ajax请求回来的参数去填充我们所需要的树了。

// 初始化对象分组树
 var treeObj = $("#modelTree");
 $.fn.zTree.init(treeObj, setting, data);
 zTree_Menu = $.fn.zTree.getZTreeObj("modelTree");

最后形成的树(可以拖拽的):

jQuery使用zTree插件实现可拖拽的树示例 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
JS/jquery实现一个网页内同时调用多个倒计时的方法
Apr 27 jQuery
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
jquery+ajaxform+springboot控件实现数据更新功能
Jan 22 jQuery
解决Jquery下拉框数据动态获取的问题
Jan 25 jQuery
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
Angular5中调用第三方库及jQuery的添加的方法
Jun 07 jQuery
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
jQuery动态操作表单示例【基于table表格】
Dec 06 jQuery
jQuery分组选择器简单用法示例
Apr 04 jQuery
jQuery高级编程之js对象、json与ajax用法实例分析
Nov 01 jQuery
jQuery擦除插件eraser使用方法详解
Jan 11 jQuery
jquery添加div实现消息聊天框
Feb 08 jQuery
一个有意思的鼠标点击文字特效jquery代码
Sep 23 #jQuery
JQuery用$.ajax或$.getJSON跨域获取JSON数据的实现代码
Sep 23 #jQuery
jQuery实现table中两列CheckBox只能选中一个的示例
Sep 22 #jQuery
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 #jQuery
使用jQuery实现两个div中按钮互换位置的实例代码
Sep 21 #jQuery
jQuery实现的简单动态添加、删除表格功能示例
Sep 21 #jQuery
jQuery实现可兼容IE6的滚动监听功能
Sep 20 #jQuery
You might like
PHP 图片文件上传实现代码
2010/12/29 PHP
php中取得URL的根域名的代码
2011/03/23 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
2014/12/01 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
动态刷新 dorado树的js代码
2009/06/12 Javascript
JavaScript 学习笔记(十一)
2010/01/19 Javascript
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
js实现移动端微信页面禁止字体放大
2017/02/16 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
Vue组件内部实现一个双向数据绑定的实例代码
2019/04/04 Javascript
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
python3序列化与反序列化用法实例
2015/05/26 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
django+mysql的使用示例
2018/11/23 Python
python爬取微信公众号文章的方法
2019/02/26 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
大学生简短的自我评价分享
2014/02/20 职场文书
矿泉水广告词
2014/03/20 职场文书
小学班主任个人总结
2015/03/03 职场文书
暂停营业通知
2015/04/25 职场文书
教育教学读书笔记
2015/07/02 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
Python初识逻辑与if语句及用法大全
2021/08/07 Python