<!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - edit</TITLE> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="../../../css/demo.css" type="text/css"> <link rel="stylesheet" href="../../../css/zTreeStyle/zTreeStyle.css" type="text/css"> <script type="text/javascript" src="../../../js/jquery-1.4.4.min.js"></script> <script type="text/javascript" src="../../../js/jquery.ztree.all-3.5.min.js"></script> <script type="text/javascript" src="../../../js/jquery.ztree.exhide-3.5.min.js"></script> <SCRIPT type="text/javascript"> <!-- var setting = { view : { addHoverDom: addHoverDom, removeHoverDom: removeHoverDom, selectedMulti: true }, edit: { enable: true, editNameSelectAll: true, removeTitle : "删除", renameTitle : "编辑", showRemoveBtn: true, showRenameBtn: showRenameBtn, drag: { isCopy: false, isMove: true, prev: canPrevAndNext, next: canPrevAndNext, inner: true } }, data: { keep: { leaf: true, parent: true }, simpleData: { enable: true } }, callback: { onDrop: zTreeOnDrop, beforeRemove: zTreeBeforeRemove, beforeRename: zTreeBeforeRename, beforeDrop: zTreeBeforeDrop } }; var setting2 = { view : { dblClickExpand : true, selectedMulti: true, expandSpeed: "fast" }, edit: { enable: true, drag: { isCopy: true, isMove: false, prev: false, next: false, inner: false }, showRemoveBtn: false, showRenameBtn: false }, data : { keep: { leaf: true, parent: true }, simpleData : { enable : true } }, callback : { onDrop: zTreeOnDrop, beforeDrag: beforeDrag, beforeDrop: zTreeBeforeDrop } }; var zNodes =[ { id:1, pId:0, name:"父节点 1", open:true}, { id:11, pId:1, name:"叶子节点 1-1"}, { id:12, pId:1, name:"叶子节点 1-2"}, { id:2, pId:0, name:"父节点 2", open:true}, { id:21, pId:2, name:"叶子节点 2-1"}, { id:23, pId:2, name:"叶子节点 2-3"}, { id:3, pId:0, name:"父节点 3", open:true}, { id:32, pId:3, name:"叶子节点 3-2"}, { id:33, pId:3, name:"叶子节点 3-3"} ]; var zNodes2 =[ { id:1, pId:0, name:"父节点 1", open:true, drag:false}, { id:11, pId:1, name:"叶子节点 1-1"}, { id:12, pId:1, name:"叶子节点 1-2"}, { id:13, pId:1, name:"叶子节点 1-3"}, { id:2, pId:0, name:"父节点 2", open:true, drag:false}, { id:21, pId:2, name:"叶子节点 2-1"}, { id:22, pId:2, name:"叶子节点 2-2"}, { id:23, pId:2, name:"叶子节点 2-3"}, { id:3, pId:0, name:"父节点 3", open:true, drag:false}, { id:31, pId:3, name:"叶子节点 3-1"}, { id:32, pId:3, name:"叶子节点 3-2"}, { id:33, pId:3, name:"叶子节点 3-3"} ]; function canPrevAndNext(treeId, nodes, targetNode) { return !targetNode.isParent; } //节点后的新建文件夹图标方法 var newCount = 1; function addHoverDom(treeId, treeNode) { var sObj = $("#" + treeNode.tId + "_span"); if (!treeNode.isParent || treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return; var addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新建文件夹' onfocus='this.blur();'></span>"; sObj.after(addStr); var btn = $("#addBtn_"+treeNode.tId); if (btn) btn.bind("click", function(){ var zTree = $.fn.zTree.getZTreeObj(treeId); var currentTime = GetCurrentTime(); treeNode = zTree.addNodes(treeNode, {id:currentTime, pId:treeNode.id, isParent:true, name:"新建文件夹" + (newCount++)}); if (treeNode) { zTree.editName(treeNode[0]); } else { alert("新建文件夹失败!请稍后再试"); } }); }; function removeHoverDom(treeId, treeNode) { $("#addBtn_"+treeNode.tId).unbind().remove(); }; //“新建文件夹”按钮的方法 function add(e) { var zTree = $.fn.zTree.getZTreeObj("treeDemo"), isParent = e.data.isParent, nodes = zTree.getSelectedNodes(), treeNode = nodes[0]; if (treeNode && !treeNode.isParent == true) { alert("只能在文件夹或根目录下新建文件夹!"); return; } var pId = (treeNode) ? treeNode.id : "0"; var currentTime = GetCurrentTime(); treeNode = zTree.addNodes(treeNode, {id:currentTime, pId:pId, isParent:isParent, name:"新建文件夹" + (newCount++)}); if (treeNode) { zTree.editName(treeNode[0]); } else { alert("新建文件夹失败!请稍后再试"); } }; function showRenameBtn(treeId, treeNode) { return treeNode.isParent; } //用于捕获节点被删除之前的事件回调函数,并且根据返回值确定是否允许删除操作 function zTreeBeforeRemove(treeId, treeNode) { if(!confirm(" 确认删除\""+treeNode.name +"\"及其子节点?")){ return false; } changNodesStat(treeNode); return true; } //用于捕获节点编辑名称结束(Input 失去焦点 或 按下 Enter 键)之后,更新节点名称数据之前的事件回调函数,并且根据返回值确定是否允许更改名称的操作 function zTreeBeforeRename(treeId, treeNode, newName, isCancel) { if (newName.length == 0) { alert("名称不能为空!"); var zTree = $.fn.zTree.getZTreeObj(treeId); setTimeout(function(){zTree.editName(treeNode);}, 10); return false; } } //用于捕获节点被拖拽之前的事件回调函数,并且根据返回值确定是否允许开启拖拽操作 function beforeDrag(treeId, treeNodes) { for (var i=0,l=treeNodes.length; i<l; i++) { if (treeNodes[i].drag === false) { return false; } } return true; } //用于捕获节点拖拽操作结束之前的事件回调函数,并且根据返回值确定是否允许此拖拽操作 function zTreeBeforeDrop(treeId, treeNodes, targetNode, moveType) { updateNodes(treeNodes); } function zTreeOnDrop(event, treeId, treeNodes, targetNode, moveType) { for( var i=0; i<treeNodes.length; i++) { treeNodes[i].drag = true; } }; function updateNodes(nodeList) { var zTree = $.fn.zTree.getZTreeObj("treeDemo2"); for( var i=0; i<nodeList.length; i++) { nodeList[i].drag = (nodeList[i].drag == null) ? false: !nodeList[i].drag; if(nodeList[i].drag == false ){ zTree.hideNode(nodeList[i]); }else{ zTree.showNode(nodeList[i]); } } } function changNodesStat(treeNode){ if(treeNode && treeNode.isParent === false){ var zTree2 = $.fn.zTree.getZTreeObj("treeDemo2"); var node = zTree2.getNodeByParam("id", treeNode.id); if(node) updateNodes([node]); }else { var nodes = filterNodes(treeNode); updateNodes(nodes); } } //自定义过滤器,传入treeDemo的父节点treeNode,返回treeDemo2中匹配id与treeNode下的叶子节点相同的节点 function filterNodes(treeNode){ var zTree2 = $.fn.zTree.getZTreeObj("treeDemo2"); var nodes = zTree2.getNodesByFilter(filter,false,null,treeNode); return nodes; } function filter(node,treeNode) { var flag = false; var zTree = $.fn.zTree.getZTreeObj("treeDemo"); var nodes = zTree.getNodesByParam("isParent", false , treeNode); for ( var i = 0; i < nodes.length; i++) { flag = (nodes[i].id == node.id); if(flag)break; } return flag; } function GetCurrentTime() { var myDate = new Date(); var year = myDate.getFullYear(); var month = parseInt(myDate.getMonth().toString()) + 1; //month是从0开始计数的,因此要 + 1 var date = myDate.getDate(); var hour = myDate.getHours(); var minute = myDate.getMinutes(); var second = myDate.getSeconds(); var millisecond = myDate.getMilliseconds(); if (month < 10) month = "0" + month.toString(); if (date < 10) date = "0" + date.toString(); if (hour < 10) hour = "0" + hour.toString(); if (minute < 10) minute = "0" + minute.toString(); if (second < 10) second = "0" + second.toString(); if(millisecond < 10){ millisecond = "00" + millisecond.toString(); }else if(millisecond < 100){ millisecond = "0" + millisecond.toString(); } var currentTime = year.toString() + month.toString() + date.toString() + hour.toString() + minute.toString() + second.toString() + millisecond.toString(); //返回时间的数字组合 return currentTime; } $(document).ready(function(){ $.fn.zTree.init($("#treeDemo"), setting, zNodes); $.fn.zTree.init($("#treeDemo2"), setting2, zNodes2); $("#addParent").bind("click", {isParent:true}, add); changNodesStat(); //获取全部节点 //var zTree2 = $.fn.zTree.getZTreeObj("treeDemo2"); //var nodes = zTree2.getNodesByParam("null", null , null); //alert(nodes.length); }); //--> </SCRIPT> <style type="text/css"> .ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position:-144px 0; vertical-align:top; *vertical-align:middle} </style> </HEAD> <BODY> <div class="content_wrap"> <div class="zTreeDemoBackground left"> 常用指标:<input type="button" id="addParent" value="新建文件夹" onclick="return false;"> <ul id="treeDemo" class="ztree"></ul> </div> <div class="zTreeDemoBackground right"> 全量指标: <ul id="treeDemo2" class="ztree"></ul> </div> </div> </BODY> </HTML>
相关推荐
首先,ZTree是基于jQuery的插件,它的核心功能包括节点的增删改查、拖拽排序、多选、权限控制等。在实际应用中,左右两棵树的布局通常用于展示具有关联关系的数据,例如权限管理、目录结构等场景。在"ztree实现左右...
ZTree是一个基于jQuery的树插件,提供丰富的API接口和多种树形操作功能,如节点的增删改查、异步加载、多选、拖拽等。它的灵活性和易用性使得它在项目中得到广泛应用,特别是在需要展示层次关系的数据场景下。 2. ...
4. **事件处理**:如果在某个特定事件(如点击、拖拽)后添加节点,确保事件处理函数中包含了添加子节点的逻辑,并正确指定了父节点。 5. **版本兼容性**:不同的ZTree版本可能有不同的API和行为。确认你使用的...
**zTree - 异步加载、拖拽与右键菜单功能详解** zTree是一款基于JavaScript的树形插件,广泛应用于网页中展示层次结构的数据。它具有轻量级、高效、可自定义等特点,能够方便地实现异步加载、拖拽操作以及右键菜单...
此外,它还提供灵活的checkbox或radio选择功能,丰富的事件响应回调和编辑操作,以及支持多节点拖拽和同时在页面内生成多个Tree实例的能力。 要解决异步加载添加子节点时的重复问题,关键在于正确地处理与父节点的...
本篇将详细讲解如何实现ZTree的拖动功能,使得用户可以将树节点拖放到文本框内,以此实现更便捷的数据输入和编辑。 首先,我们要理解ZTree的拖放(Drag&Drop)功能是如何工作的。ZTree通过监听浏览器的`dragstart`...
在本文中,我们将深入探讨如何使用jQuery插件zTree实现单独选中根节点中的第一个节点。...在实际项目中,zTree还提供了许多其他功能,如节点的展开/折叠、异步加载、拖拽排序等,可以根据需求灵活运用。
1. **初始化配置**:设置ZTree的基本配置,如树的ID、样式、节点展开策略等,以及`ztree-select`特有的属性,例如默认选中项、是否允许多选等。 2. **数据绑定**:将后端返回的层次结构数据通过JavaScript方法传递...
- `children`: 如果节点有子节点,这里会包含一个子节点的数组,每个子节点也是同样的treeNode结构。 ZTree的JSON数据格式是非常灵活的,可以适应各种复杂的需求。例如,你可以通过在`treeNode`中添加自定义属性来...
zTree还提供了许多高级功能,如节点的拖拽、搜索、编辑等,可以根据项目需求灵活运用。同时,它的API文档详尽,社区活跃,遇到问题时可以方便地找到解决方案。 总的来说,zTree是一款强大且易用的树形菜单插件,...
ZTree的编辑功能包括节点文本的修改、拖拽节点调整层级以及添加、删除节点。`setting.edit.drag`和`setting.edit.rename`分别控制拖拽和重命名功能。添加节点通常通过调用`treeObj.addNodes()`实现,删除节点则使用...
我们需要监听这些事件,当用户开始拖动节点时触发`onDrag`,完成拖放后触发`onDrop`。在`onDrop`事件中,我们需要处理节点移动的逻辑,包括更新数据源,调整树结构,并同步到右侧面板。 4. **动态加载右侧面板**:...
本话题将深入探讨ZTree的完整展示以及如何对树节点进行增加、删除和修改操作,同时也包括树节点之间的拖拽功能。 一、ZTree的完整展示 ZTree的完整展示涉及到以下几个关键点: 1. 数据源:ZTree的数据源通常是一...
你需要定义一个`ul`元素作为树的容器,并在JavaScript中设置相应的配置项,例如节点的展开/关闭行为、节点点击事件等。同时,你需要为每个节点提供ID、父ID、名称等属性,形成JSON数据结构,供Ztree解析。 2. **...
在本文中,我们将深入探讨...zTree还提供了丰富的API和事件系统,使得在实际项目中进行更复杂的操作如异步加载、节点拖拽等变得非常方便。在开发过程中,查阅zTree的官方文档将帮助你更好地理解和利用这个插件的功能。
**zTree概述** zTree是一款基于JavaScript的树形插件,广泛应用于网页中展示层级结构的数据,例如组织架构、文件目录、菜单系统等。它以其轻量级、高性能、易于扩展的特点深受开发者喜爱。zTree提供了丰富的API接口...
zTree支持多种功能,如节点的增删改查、多选、拖拽等,广泛应用于网站的目录导航、权限管理等领域。 在本文中,我们探讨的是如何使用zTree实现清空选中第一个节点的所有子节点的功能。这个功能对于需要动态管理树...
**jsPlumbToolkit与zTree拖拽连线Demo详解** 在前端开发中,有时我们需要实现图形化界面,允许用户通过拖拽元素并建立连接来构建或编辑数据结构。在这个场景下,`jsPlumbToolkit` 和 `zTree` 这两个JavaScript库能...
至于"树形移动实例",zTree提供了拖拽功能,允许用户通过鼠标拖动节点来调整树形结构,这在管理层次结构数据时非常实用。例如,在文件管理场景中,用户可以将文件或文件夹从一个目录移动到另一个目录,或者在组织...