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 相关文章推荐
纯jQuery实现前端分页功能
Mar 23 jQuery
jquery DataTable实现前后台动态分页
Jun 17 jQuery
jQuery ajax调用webservice注意事项
Oct 08 jQuery
jQuery中 DOM节点操作方法大全
Oct 12 jQuery
jQuery+CSS实现的table表格行列转置功能示例
Jan 08 jQuery
jQuery+ajax实现动态添加表格tr td功能示例
Apr 23 jQuery
jQuery无冲突模式详解
Jan 17 jQuery
jquery层次选择器的介绍
Jan 18 jQuery
jquery实现二级导航下拉菜单效果实例
May 14 jQuery
jQuery操作选中select下拉框的值代码实例
Feb 07 jQuery
jQuery实现聊天对话框
Feb 08 jQuery
jQuery实现二级导航菜单的示例
Sep 30 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语法(3)
2006/10/09 PHP
快速配置PHPMyAdmin方法
2008/06/05 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
php自定义的格式化时间示例代码
2013/12/05 PHP
PHP基本语法总结
2014/09/06 PHP
php中实现字符串翻转的方法
2017/02/22 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
div层的移动及性能优化
2010/11/16 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
jquery 实现回车登录详解及实例代码
2016/10/23 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
从局部变量和全局变量开始全面解析Python中变量的作用域
2016/06/16 Python
使用python实现生成用户信息
2017/03/20 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
python实现IOU计算案例
2020/04/12 Python
python能做哪方面的工作
2020/06/15 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
重构Python代码的六个实例
2020/11/25 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
运动会入场词100字
2014/02/06 职场文书
离职保密承诺书
2014/05/28 职场文书
家长会欢迎标语
2014/06/24 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
2014年环保工作总结
2014/11/26 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
浅谈如何提高PHP代码的质量
2021/05/28 PHP
用Python爬取某乎手机APP数据
2021/06/15 Python
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android