基于zTree的常用成员管理树图级联选择(仿穿梭框功能)

ztree带层级穿梭框 ztree带层级穿梭框,可以左右移动,可以去除重复的数据 立即下载

广州这几天的天气异常寒冷,前几天搞一个系统需要实现菜单管理,而菜单管理页则需要涉及到给用户授权访问菜单,因此需要选择相应的可访问成员,之前在基于elementui的后台管理系统中用过它的树图组件,觉得挺不错的,因此决定自己封装一个jquery的ztree成员管理树图,在这淘宝双十二的夜晚,闲暇之余记录下自己的学习点滴------------前言

源码地址:https://github.com/applebring/zTree-Plugin-for-jquery.git

运行:目前为静态数据,直接运行index.html即可

插件功能:可实现对左侧树图节点的搜索,可实现选择左侧树图成员到右侧框中,可实现右侧数据的删除,可实现数据的初始化

基本界面如下:

直接上代码,注释也已经很清晰

HTML:

<body>
	<h1>基于zTree树部门成员选择器插件</h1>
	<div class="content_wrap">
		<div class="zTreeDemoBackground left">
			<div class="input-search">
				<input type="text" placeholder="输入关键字查询" id="filter-text" class="empty" /><span style="color:red;font-size:12px;position:absolute;left:0;right:0;top:40px;display:none;"
				 class="no-data">查找不到结果~</span>
			</div>
			<div class="tree-content">
				<ul id="treeDemo" class="ztree"></ul>
			</div>
		</div>
		<div class="right">
			<ul class="choose-content">
			</ul>
		</div>
	</div>
	<br/>
	<button id="btn-reset">重置数据项</button>&nbsp;<button id="btn-confirm-id">获取选中数据(id)</button>&nbsp;<button id="btn-confirm-obj">获取选中数据(obj)</button>
	<div class="choose-data">
		<div class="choose-data">
			<span>当前选中数据为:</span><br/>
			<div class="data">暂无数据</div>
		</div>
</body>

未封装为插件前的JAVASCRIPT(ps:搜索关键字可根据需要搜索zNode相应字段,本次搜索是通过name字段搜索,如需搜索到父级文字可搜索zNodes中的searchdata字段)

	$(function () {
			page.init();
		});
		var page = (function () {
			var treeInit = function () {
				/*
				渲染数组到右侧
				arr:  渲染的数组
				*/
				function renderData(arr) {

				}
				/*主要功能:将点击事件与checked事件关联,判断是否最后一个元素,如果是,将最后一个元素放入渲染数组,再将数组渲染到右侧
				eventjs event 对象
				treeIdString  对应 zTree 的 treeId,便于用户操控
				treeNodeJSON  被点击的节点 JSON 数据对象
				*/
				function checkChangeFn(event, treeId, treeNode) {
					var rightArr = [];
					var checkedNode = zTree.getCheckedNodes(true);
					$.each(checkedNode, function (i, item) {
						if (!item.isParent) {/*item.isLastNode判断结点是否为最后一个结点*/
							rightArr.push(item);
						}
					});
					var rhtml = "";
					$.each(rightArr, function (i, item) {
						rhtml += "<li data-item='" + JSON.stringify(item) + "'><span>" + item.name + "</span><span class='close'>x</span></li>";
					});
					$(".choose-content").html(rhtml);
				}
				/*
				高亮样式设置
				*/
				function getFontCss(treeId, treeNode) {
					return (!!treeNode.highlight) ? { color: "#A60000", "font-weight": "bold" } : { color: "#333", "font-weight": "normal" };
				}
				var setting = {
					check: {
						enable: true
					},
					data: {
						simpleData: {
							enable: true
						}
					},
					view: {
						fontCss: getFontCss
					},
					callback: {
						onClick: function (event, treeId, treeNode) {
							//将点击事件与复选框事件关联
							var zTree = $.fn.zTree.getZTreeObj("treeDemo");
							zTree.checkNode(treeNode, !treeNode.checked, true);
							checkChangeFn(event, treeId, treeNode);
							var curSelect = $("#treeDemo").find(".curSelectedNode");//控制选中项背景样式
							treeNode.checked == true ? (curSelect.hasClass("unactive") ? curSelect.removeClass("unactive") : '') : curSelect.addClass("unactive");
						},
						onCheck: checkChangeFn
					}
				};
				var zNodes = [
					{ id: 1, pId: 0, name: "集团", open: true, checked: false,searchdata:"集团" },
					{ id: 11, pId: 1, name: "一汽", open: true, checked: false,searchdata:'集团一汽' },
					{ id: 111, pId: 11, name: "一汽子成员1", checked: false,searchdata:'集团一汽一汽子成员1' },
					{ id: 112, pId: 11, name: "一汽子成员2", checked: false,searchdata:'集团一汽一汽子成员2' },
					{ id: 12, pId: 1, name: "二汽", open: true, checked: false,searchdata:'集团二汽' },
					{ id: 121, pId: 12, name: "二汽子成员1", checked: false,searchdata:'集团二汽二汽子成员1' },
					{ id: 122, pId: 12, name: "二汽子成员2", checked: false,searchdata:'集团二汽二汽子成员2' },
					{ id: 2, pId: 0, name: "集团 2", checked: true, open: true,searchdata:'' },
					{ id: 21, pId: 2, name: "一汽", checked: true,searchdata:'' },
					{ id: 22, pId: 2, name: "二汽", open: true, checked: false,searchdata:'' },
					{ id: 221, pId: 22, name: "二汽1", checked: true,searchdata:'' },
					{ id: 222, pId: 22, name: "二汽2", checked: true,searchdata:'' },
					{ id: 23, pId: 2, name: "三汽", checked: false,searchdata:'' }
				];
				$.fn.zTree.init($("#treeDemo"), setting, zNodes);
				var zTree = $.fn.zTree.getZTreeObj("treeDemo");
				//初始化数据,调用树图check事件
				zTree.setting.callback.onCheck();
				//清空搜索框内容
				$("#filter-text").val("");
			};
			//组件初始化;
			var componentInit = function () {
				//右侧选框删除事件
				$(".choose-content").on("click", ".close", function () {
					var tId = $(this).parent("li").data("item").tId;
					var zTree = $.fn.zTree.getZTreeObj("treeDemo");
					//通过id找到节点,改变状态
					zTree.checkNode(zTree.getNodeByTId(tId), false, true);
					//移除元素
					$(this).parent("li").remove();
				});
				/*
				搜索树节点,如果找到则高亮显示,没找到提示
				*/
				function updateNodes(highlight, nodeList) {
					var zTree = $.fn.zTree.getZTreeObj("treeDemo");
					if($("#filter-text").val()!=""){zTree.expandAll(false);}//先折叠所有节点,再展开相应的节点
					for (var i = 0, l = nodeList.length; i < l; i++) {
						nodeList[i].highlight = highlight;
						zTree.expandNode(nodeList[i].getParentNode(), true, false, false); //将搜索到的节点的父节点展开
						zTree.updateNode(nodeList[i]);
					}
				}
				function searchNode() {
					var filter = $("#filter-text").val();
					var zTree = $.fn.zTree.getZTreeObj("treeDemo");
					var filterArr = zTree.getNodesByParamFuzzy("name", filter, null);;
					if (filter === ""){updateNodes(false,filterArr);$(".no-data").css("display","none");return;};
					if(filter!=""&&filterArr.length==0){$(".no-data").css("display","block");}else{$(".no-data").css("display","none");}
					updateNodes(true, filterArr);
				}
				/*输入框添加输入监听*/
				$("#filter-text").on("propertychange", searchNode).on("input", searchNode);
			};
			return {
				init: function () {
					treeInit();
					componentInit();
				}
			}
		})();

以上为未封装成插件源码,易于理解,封装成插件后使用规则如下,源码请到github上下载

封装成插件后的Javascript

<script type="text/javascript" src="./resources/libs/jQuery/jquery-2.2.3.min.js"></script>
<script type="text/javascript" src="./resources/libs/zTree_v3/js/jquery.ztree.core.js"></script>
<script type="text/javascript" src="./resources/libs/zTree_v3/js/jquery.ztree.excheck.js"></script>
<script type="text/javascript" src="./resources/js/tree.js"></script>
<script>
	var zNodes = [
		{ id: 1, pId: 0, name: "集团", open: true, checked: false, searchdata: "集团" },
		{ id: 11, pId: 1, name: "一汽", open: true, checked: false, searchdata: '集团一汽' },
		{ id: 111, pId: 11, name: "一汽子成员1", checked: false, searchdata: '集团一汽一汽子成员1' },
		{ id: 112, pId: 11, name: "一汽子成员2", checked: false, searchdata: '集团一汽一汽子成员2' },
		{ id: 12, pId: 1, name: "二汽", open: true, checked: false, searchdata: '集团二汽' },
		{ id: 121, pId: 12, name: "二汽子成员1", checked: false, searchdata: '集团二汽二汽子成员1' },
		{ id: 122, pId: 12, name: "二汽子成员2", checked: false, searchdata: '集团二汽二汽子成员2' },
		{ id: 2, pId: 0, name: "集团 2", checked: true, open: true, searchdata: '集团 2' },
		{ id: 21, pId: 2, name: "一汽", checked: true, searchdata: '集团 2一汽' },
		{ id: 22, pId: 2, name: "二汽", open: true, checked: false, searchdata: '集团 2二汽' },
		{ id: 221, pId: 22, name: "二汽1", checked: true, searchdata: '集团 2二汽二汽1' },
		{ id: 222, pId: 22, name: "二汽2", checked: true, searchdata: '集团 2二汽二汽2' },
		{ id: 23, pId: 2, name: "三汽", checked: false, searchdata: '集团 2二汽三汽' }
	];
	var tree = $("#treeDemo").TransferTree({
		zNodes: zNodes
	});
	//重置选择项
	$("#btn-reset").on("click", function () {
		//按照zTree数据格式
		var resetzNodes = [
			{ id: 1, pId: 0, name: "集团", open: true, checked: false, searchdata: "集团" },
			{ id: 11, pId: 1, name: "一汽", open: true, checked: false, searchdata: '集团一汽' },
			{ id: 111, pId: 11, name: "一汽子成员1", checked: true, searchdata: '集团一汽一汽子成员1' },
			{ id: 112, pId: 11, name: "一汽子成员2", checked: true, searchdata: '集团一汽一汽子成员2' },
			{ id: 12, pId: 1, name: "二汽", open: true, checked: false, searchdata: '集团二汽' },
			{ id: 121, pId: 12, name: "二汽子成员1", checked: false, searchdata: '集团二汽二汽子成员1' },
			{ id: 122, pId: 12, name: "二汽子成员2", checked: false, searchdata: '集团二汽二汽子成员2' },
			{ id: 2, pId: 0, name: "集团 2", checked: true, open: true, searchdata: '集团 2' },
			{ id: 21, pId: 2, name: "一汽", checked: true, searchdata: '集团 2一汽' },
			{ id: 22, pId: 2, name: "二汽", open: true, checked: false, searchdata: '集团 2二汽' },
			{ id: 221, pId: 22, name: "二汽1", checked: false, searchdata: '集团 2二汽二汽1' },
			{ id: 222, pId: 22, name: "二汽2", checked: false, searchdata: '集团 2二汽二汽2' },
			{ id: 23, pId: 2, name: "三汽", checked: false, searchdata: '集团 2二汽三汽' }
		];
		tree.resetData(resetzNodes);
	});
	//获取选中项by id
	$("#btn-confirm-id").on("click", function () {
		var getData = tree.getCheckData('id');
		$(".data").html(getData.toString());
	});
	//获取选中项by obj
	$("#btn-confirm-obj").on("click", function () {
		var getData2 = tree.getCheckData('obj');
		$(".data").html(JSON.stringify(getData2));
	});
</script>

本博客上的js代码是未经封装的插件,封装成插件后的代码已传到git上,要是需要用到的朋友请直接到git上下载源码运行~如有错误之处,也欢迎指出~要是有感兴趣的朋友想封装下,也欢迎来互相交流下~

jQuery 树形结构插件 zTree zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。 立即下载

相关推荐

Ztree bootstrap风格,跨浏览器所有功能可用

Ztree 功能强大,就是界面跟bootstrap风格差太大,修改图标和操作功能为可用

zTree插件 角色、部门、人员分类选择

// 传参数调用 function test(){roleOrOrgSelect(3,function(data){console.log(data);});} /** * * @param type (1:返回选中的角色数据 2:返回选中的机构数据 3:返回选中的人员数据) * @param callback (用户自定义回调函数) * @returns */ ...

weixin_33698823的博客 1768

基于layui实现树形穿梭框

基于layui实现树形穿梭框

Java+zTree审批人员选择

实现一个类似于钉钉审批人员选择的功能。 这里使用zTree实现组织架构树。 实体类需要有id,pId实现上下级关系。 company.java getter/setter略。 private int company_id;//公司id private String company_name;//公司名称 private String remark;//备注信息 ...

丶Melody 4581

Android AudioFlinger(一)——初识AndroidAudio Flinger

AudioFlinger 是 Android 系统中的音频中间层(audio HAL, Audio Hardware Abstraction Layer)的一部分,负责管理音频的混音、播放和音量控制等功能。它充当 Android 应用程序和音频硬件之间的桥梁。

hirezy 1671

BEVFusion实战:从零搭建LiDAR-Camera融合的3D目标检测环境(附避坑指南)

本文提供了BEVFusion实战指南,详细讲解如何从零搭建LiDAR-Camera融合的3D目标检测环境。内容涵盖环境配置、数据预处理、模型训练与性能优化等关键步骤,并附有实用的避坑技巧,帮助开发者高效部署这一先进的BEV感知算法。

p4q5r6s7t的博客 516

jquery 树形控件 Ztree

官网: http://www.ztree.me/v3/main.php 使用 json 数据格式 简单实例:http://tieba.baidu.com/f?kz=1432280689 项目中使用ztree实现部门及人员选择框的例子:支持默认选中 展开  <% response.setHeader("Charset","UTF-8'"); String path = request

z69183787的专栏 1万+

嵌入式硬件实战:RC、LC与RL滤波电路的设计与选型指南

本文深入探讨了嵌入式系统中RC、LC与RL滤波电路的设计与选型策略。通过生活化比喻和实战案例,详细解析了三种滤波电路的工作原理、应用场景及工程注意事项,帮助工程师根据电流大小、频率特征和成本预算选择最优方案,提升嵌入式硬件设计的稳定性和抗干扰能力。

kiwi8的博客 286

ztree 异步展开节点显示不出来_用户管理、角色管理、模块管理、zTree的使用

全部都是增删改查修改mapper,service,controller,jsp给角色分配权限1.1 跳转分配权限页面1.1.1 jsp//实现权限 function toModule() { if (isOnlyChecked()) { formSubmit('${ctx}/role/tomodule', '_self'); } else { ale...

weixin_39849287的博客 355

基于PyQt5的ROS移动机器人的人机交互UI界面

每次做实验的时候,手动rosrun,roslaunch太过麻烦,通过ui界面的话,只需要点点按钮就可以啦 ros_car_py包括运动,建图,导航,ui界面的程序全部打包上传,相互依赖关系见ros_car_py包。 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets imp...

工大机器人工作室 7366

华为ensp.访问控制列表(ACL):关于基本ACL和高级ACL————访问的代码基础讲解(允许或禁止访问)

ACL 目的:为了在设备进行通信时,保障传输的数据足够的安全可靠和网络的型能稳定。 访问控制列表((ACL)Access Coutrol List): 通过定义一些规则,根据规则对数据包进行分类,并针对不同的报文进行不同处理,从而可以实现对网络访问的控制.限制网络流量,提高网络性能,为了防止网络攻击等等。 ACL分类 分类 编号范围 参数 基本ACL 2000-2999 源IP地址等 高级ACL

m0_52479012的博客 2万+

ztree组织树实例,选中并展示已选数据

1

zwy0724的博客 1180

OpenCloudOS9操作系统搭建Confluence8.2.1+Jira企业级WIKI

Atlassian Confluence是一个专业的企业知识管理与协同软件,可用于构建企业wiki

背锅神童的博客 1023

21zTree - 用 zTree 方法 勾选 checkbox

效果图: 代码: <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - beforeCheck / onCheck</TITLE> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> &l...

阿甘兄 1845

AgentScope Java 2.0 项目实战:从零构建企业级自主Coding Agent

本文基于 AgentScope Java 框架,完整拆解两个生产级 AI Agent 项目的从零开发全过程。其一是企业级自主编码机器人(agentscope-codingagent),支持 Issue→PR 自动实现、PR Code Review、Docker 沙箱隔离执行与多通道接入;其二是个人 AI 助手管理平台(agentscope-paw),采用 Spring Boot + React 全栈架构,支持多 Agent、技能市场与多 IM 通道。

program哲学 842

【Android 教程系列第 30 篇】为什么要为 App 应用加固 ?如何为 App 应用加固 ?

一:为什么要为 App 应用加固 ? 二:如何为 App 应用加固 ? 三:加固后为什么要重新签名 ?

“Allen Su”的博客 7055

ztree的创建和勾选

&lt;div id="div_tree" class="people_list mt10" style="width:100%;overflow:auto;"&gt; &lt;ul id="mytree" class="ztree"&gt;&lt;/ul&gt; &lt;/div&gt;

qq_33824312的博客 298

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ztree控制是否级联选择

有这么一个需求,在树形选择的时候需要通过一个复选框控制是否级联选择,如下图 这个鬼东西搞得心累,中间失败的方案就不提了,直接写成功实现了的 1:要写一个 zTreeBeforeCheck的方法 2:这里的alongCheck就是那个是否级联选择的复选框的id function zTreeBeforeCheck(treeI...

六一首席 1822

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

使用vue+zTree实现穿梭框嵌套树形结构

此处是选择文件部分,它由elementUI的卡片组件和zTree的树形图插件组合而成。

NNwanzi的博客 2979

ElementUI Tree 树形结构展示

后台传过来已经封装好的树形数据

小猫爪子 4188

element树样式的修改,可以参考一下,实现效果和代码有展示

有关树控件样式的修改,实现效果如下: 贴上html代码: <div class="treegroup"> <div class="righttree"> // 一共有三个数并排展示,由于截图大小原因这个没有截出来,所以代码省略,跟下面的树一样的,一个掌握了,想要实现N多树都是一样的道理 </div> <div class="righttree">

lianmindiandi 1058

【Axure教程】穿梭框拖动选择器

随着系统的升级,用户的操作习惯的发生了改变,从以往的点点点,到现在的拖拉拽。拖动、滑动的操作在软件操作里越来越常见。所以今天作者就教大家在Axure里如果使用中继器以及动态面板,来做一个拖动选择的穿梭选择器。 【原型预览】 用电脑点击左下方阅读原文或复制打开下面的原型预览地址 https://xqvfpk.axshare.com/#g=1 【原型下载】 方式1:加入原型分享群后,可下载使用全部原型,详情请咨询微信522073109 方式2:https://weidian.com/item.h

mushe93的博客 1425

记录几款vue的Tree树形控件

一:Vue Beauty url:https://fe-driver.github.io/vue-beauty/#/components/tree 特色:找了很多个框架,只有Vue Beauty是带连接线的,刚好项目能用上。 二:iView url:https://www.iviewui.com/components/tree 特点:有比较多的可自定义的地方,这个很好。 三:Element url:https://element.eleme.cn/2.0/#/zh-CN/componen..

hsany330的专栏 1845

基于ztree树的穿梭框

前面的话:zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。专门适合项目开发,尤其是 树状菜单、树状数据。 ztree官方文档:http://www.treejs.cn/v3/api.php 在项目开发中,基于ztree树,可以实现很多不同的效果,比如仿windows文件,对树文件进行新建和拖拽效果,比如...

祈澈菇凉 2370

zTree修改样式(例如修改字体大小,和各种图标)

找到zTree_v3/css/ zTreeStyle/zTreeStyle.css文件找到ztree*{}在里面修改样式需要修改其他,找到相应css修改即可

CHL博客 3万+

el-tree的样式拓展

最近项目中使用到了elementUI,不免会用到el-tree组件,但是el自带的样式不是很好看,这里我们把el-tree的样式进行拓展,话不多说,直接上干货 /*最外层背景色。 字体颜色*/ .el-tree { background: none; color: #82b0ec; } /*图标颜色*/ .el-tree-node__expand-icon {

kunzedang_9528的博客 2566
上一篇: new Promise 结合ajax 单个请求与多个请求写法
下一篇: Vue中引入高德地图cdn链接方式汇总(可按需加载)
小简GoGo
博客等级 码龄10年 50粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值