`
guodefu909
  • 浏览: 4326 次
文章分类
社区版块
存档分类
最新评论

ztree BeforeDrop 设置拖拽节点隐藏,结果拖拽后的节点也一起隐藏了

阅读更多
<!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实现左右两棵树的节点移动

    首先,ZTree是基于jQuery的插件,它的核心功能包括节点的增删改查、拖拽排序、多选、权限控制等。在实际应用中,左右两棵树的布局通常用于展示具有关联关系的数据,例如权限管理、目录结构等场景。在"ztree实现左右...

    ztree树选中节点弹出层编辑

    ZTree是一个基于jQuery的树插件,提供丰富的API接口和多种树形操作功能,如节点的增删改查、异步加载、多选、拖拽等。它的灵活性和易用性使得它在项目中得到广泛应用,特别是在需要展示层次关系的数据场景下。 2. ...

    jquery ztree 根目录只能够添加一级目录,子节点添加新的节点到当前节点下方

    4. **事件处理**:如果在某个特定事件(如点击、拖拽)后添加节点,确保事件处理函数中包含了添加子节点的逻辑,并正确指定了父节点。 5. **版本兼容性**:不同的ZTree版本可能有不同的API和行为。确认你使用的...

    ztree 异步加载 拖拽 右键菜单 功能

    **zTree - 异步加载、拖拽与右键菜单功能详解** zTree是一款基于JavaScript的树形插件,广泛应用于网页中展示层次结构的数据。它具有轻量级、高效、可自定义等特点,能够方便地实现异步加载、拖拽操作以及右键菜单...

    jQuery zTree 异步加载添加子节点重复问题

    此外,它还提供灵活的checkbox或radio选择功能,丰富的事件响应回调和编辑操作,以及支持多节点拖拽和同时在页面内生成多个Tree实例的能力。 要解决异步加载添加子节点时的重复问题,关键在于正确地处理与父节点的...

    ztree可以拖动的到文本框

    本篇将详细讲解如何实现ZTree的拖动功能,使得用户可以将树节点拖放到文本框内,以此实现更便捷的数据输入和编辑。 首先,我们要理解ZTree的拖放(Drag&Drop)功能是如何工作的。ZTree通过监听浏览器的`dragstart`...

    jQuery插件zTree实现单独选中根节点中第一个节点示例

    在本文中,我们将深入探讨如何使用jQuery插件zTree实现单独选中根节点中的第一个节点。...在实际项目中,zTree还提供了许多其他功能,如节点的展开/折叠、异步加载、拖拽排序等,可以根据需求灵活运用。

    ztree-select下拉框

    1. **初始化配置**:设置ZTree的基本配置,如树的ID、样式、节点展开策略等,以及`ztree-select`特有的属性,例如默认选中项、是否允许多选等。 2. **数据绑定**:将后端返回的层次结构数据通过JavaScript方法传递...

    ztree最简单的树--标准JSON 数据

    - `children`: 如果节点有子节点,这里会包含一个子节点的数组,每个子节点也是同样的treeNode结构。 ZTree的JSON数据格式是非常灵活的,可以适应各种复杂的需求。例如,你可以通过在`treeNode`中添加自定义属性来...

    使用 zTree 动态加载树形菜单

    zTree还提供了许多高级功能,如节点的拖拽、搜索、编辑等,可以根据项目需求灵活运用。同时,它的API文档详尽,社区活跃,遇到问题时可以方便地找到解决方案。 总的来说,zTree是一款强大且易用的树形菜单插件,...

    jquery ztree自定义编辑的树形菜单插件

    ZTree的编辑功能包括节点文本的修改、拖拽节点调整层级以及添加、删除节点。`setting.edit.drag`和`setting.edit.rename`分别控制拖拽和重命名功能。添加节点通常通过调用`treeObj.addNodes()`实现,删除节点则使用...

    左树节点动态拖到右侧面板

    我们需要监听这些事件,当用户开始拖动节点时触发`onDrag`,完成拖放后触发`onDrop`。在`onDrop`事件中,我们需要处理节点移动的逻辑,包括更新数据源,调整树结构,并同步到右侧面板。 4. **动态加载右侧面板**:...

    完整的ZTree树展示及对树节点的增删改

    本话题将深入探讨ZTree的完整展示以及如何对树节点进行增加、删除和修改操作,同时也包括树节点之间的拖拽功能。 一、ZTree的完整展示 ZTree的完整展示涉及到以下几个关键点: 1. 数据源:ZTree的数据源通常是一...

    Ztree+treeTable实现 Java实现 树形菜单 树形表格

    你需要定义一个`ul`元素作为树的容器,并在JavaScript中设置相应的配置项,例如节点的展开/关闭行为、节点点击事件等。同时,你需要为每个节点提供ID、父ID、名称等属性,形成JSON数据结构,供Ztree解析。 2. **...

    jQuery插件zTree实现删除树子节点的方法示例

    在本文中,我们将深入探讨...zTree还提供了丰富的API和事件系统,使得在实际项目中进行更复杂的操作如异步加载、节点拖拽等变得非常方便。在开发过程中,查阅zTree的官方文档将帮助你更好地理解和利用这个插件的功能。

    zTree帮助文档_ztree_

    **zTree概述** zTree是一款基于JavaScript的树形插件,广泛应用于网页中展示层级结构的数据,例如组织架构、文件目录、菜单系统等。它以其轻量级、高性能、易于扩展的特点深受开发者喜爱。zTree提供了丰富的API接口...

    jQuery插件zTree实现清空选中第一个节点所有子节点的方法

    zTree支持多种功能,如节点的增删改查、多选、拖拽等,广泛应用于网站的目录导航、权限管理等领域。 在本文中,我们探讨的是如何使用zTree实现清空选中第一个节点的所有子节点的功能。这个功能对于需要动态管理树...

    jsPlumbToolkit +ztree拖拽连线demo

    **jsPlumbToolkit与zTree拖拽连线Demo详解** 在前端开发中,有时我们需要实现图形化界面,允许用户通过拖拽元素并建立连接来构建或编辑数据结构。在这个场景下,`jsPlumbToolkit` 和 `zTree` 这两个JavaScript库能...

    简单zTree树形,支持单选、多选、移动实例

    至于"树形移动实例",zTree提供了拖拽功能,允许用户通过鼠标拖动节点来调整树形结构,这在管理层次结构数据时非常实用。例如,在文件管理场景中,用户可以将文件或文件夹从一个目录移动到另一个目录,或者在组织...

Global site tag (gtag.js) - Google Analytics