jquery zTree异步加载、模糊搜索简单实例分享


Posted in Javascript onMarch 24, 2016

本文实例为大家讲解了jquery zTree树插件的基本使用方法,具体内容如下

一、节点模糊搜索功能:搜索成功后,自动高亮显示并定位、展开搜索到的节点。

二、节点异步加载:1、点击展开时加载数据;2、选中节点时加载数据。
前台代码如下:

<script type="text/javascript">
 //ztree设置
 var setting = {
 view: {
 fontCss: getFontCss
 },
 check: {
 enable: true
 },
 data: {
 simpleData: {
 enable: true,
 idKey: "id",
 pIdKey: "pId",
 rootPId: 0
 }
 },
 async: {
 enable: true,
 url: "#{getStudentsJsonUrl}",
 autoParam: ["id", "level"]
 },
 callback: {
 beforeCheck: zTreeBeforeCheck,
 onNodeCreated: zTreeOnNodeCreated,
 beforeExpand: zTreeBeforeExpand
 }
 };

 var reloadFlag = false; //是否重新异步请求
 var checkFlag = true; //是否选中

 //节点展开前
 function zTreeBeforeExpand(treeId, treeNode) {
 reloadFlag = false;
 return true;
 };

 //节点创建后
 function zTreeOnNodeCreated(event, treeId, treeNode) {
 var zTree = $.fn.zTree.getZTreeObj(treeId);
 if (reloadFlag) {
 if (checkFlag) {
 zTree.checkNode(treeNode, true, true);
 }
 if (!treeNode.children) {
 zTree.reAsyncChildNodes(treeNode, "refresh");
 }
 }
 };

 //选中节点前
 function zTreeBeforeCheck(treeId, treeNode) {
 var zTree = $.fn.zTree.getZTreeObj(treeId);
 if (!treeNode.children) {
 reloadFlag = true;
 checkFlag = true;
 zTree.reAsyncChildNodes(treeNode, "refresh");
 }
 return true;
 }

 //页面加载完成
 _run(function () {
 require(['zTree/js/jquery.ztree.all-3.5'], function () {
 $.ajax({
 type: "POST",
 url: "#{getStudentsJsonUrl}",
 success: function (data) {
 if (data && data.length != 0) { //如果结果不为空
 $.fn.zTree.init($("#tree"), setting, data);
 }
 else { //搜索不到结果

 }
 }
 });
 });

 //提交
 $("#inputSubmit").click(function () {
 var zTree = $.fn.zTree.getZTreeObj("tree");
 var nodes = zTree.getCheckedNodes(true);
 var ids = "";
 var names = "";
 for (var i = 0; i < nodes.length; i++) { //遍历选择的节点集合
 if (!nodes[i].isParent) {
 ids += nodes[i].id.replace("level" + nodes[i].level, "") + ",";
 names += nodes[i].name + ",";
 }
 }
 Simpo.ui.box.hideBox();
 parent.$(".boxFrm").contents().find("#inputRange").val(names.substr(0, names.length - 1));
 parent.$(".boxFrm").contents().find("#hidRange").val(ids.substr(0, ids.length - 1));
 })
 });

 //查找节点
 var lastNodeList = [];
 var lastKey;
 function searchNode() {
 var zTree = $.fn.zTree.getZTreeObj("tree");

 var key = $.trim($("#inputSearchNode").val());
 if (key != "" && key != lastKey) {
 nodeList = zTree.getNodesByParamFuzzy("name", key);
 for (var i = 0, l = lastNodeList.length; i < l; i++) { //上次查询的节点集合取消高亮
 lastNodeList[i].highlight = false;
 zTree.updateNode(lastNodeList[i]);
 }
 zTree.expandAll(false); //全部收缩
 if (nodeList.length > 0) {
 for (var i = 0, l = nodeList.length; i < l; i++) { //遍历找到的节点集合
 if (nodeList[i].getParentNode()) {
 zTree.expandNode(nodeList[i].getParentNode(), true, false, false); //展开其父节点
 }
 nodeList[i].highlight = true;
 zTree.updateNode(nodeList[i]);
 }
 }
 zTree.refresh(); // 很重要,否则节点状态更新混乱。
 lastNodeList = nodeList;
 lastKey = key;
 }
 }

 //加载数据
 function loadData() {
 var zTree = $.fn.zTree.getZTreeObj("tree");
 var rootNodes = zTree.getNodes();
 reloadFlag = true;
 checkFlag = false;
 for (var i = 0; i < rootNodes.length; i++) {
 if (!rootNodes[i].children) {
 zTree.reAsyncChildNodes(rootNodes[i], "refresh"); //异步加载
 }
 }
 }

 //全部收缩
 function closeAll() {
 var zTree = $.fn.zTree.getZTreeObj("tree");
 if ($("#inputCloseAll").val() == "全部收缩") {
 zTree.expandAll(false);
 $("#inputCloseAll").val("全部展开")
 }
 else {
 zTree.expandAll(true);
 $("#inputCloseAll").val("全部收缩")
 }
 }

 //高亮样式
 function getFontCss(treeId, treeNode) {
 return (treeNode.highlight) ? { color: "#A60000", "font-weight": "bold"} : { color: "#333", "font-weight": "normal" };
 }
</script>
<div style="width: 200px; height: 260px; overflow: auto; border: solid 1px #666;">
 <ul id="tree" class="ztree">
 </ul>
 </div>

后台代码(后台返回Json数据):

public void SelStudent()
 {
 set("getStudentsJsonUrl", to(GetStudentsJson));
 }

 public void GetStudentsJson()
 {
 List<Dictionary<string, string>> dicList = new List<Dictionary<string, string>>();

 string level = ctx.Post("level");
 string id = ctx.Post("id");
 if (strUtil.IsNullOrEmpty(id))
 {
 #region 加载班级
 //获取当前登录用户
 Sys_User user = AdminSecurityUtils.GetLoginUser(ctx);
 //获取当前用户关联的老师
 Edu_Teacher teacher = edu_TeacService.FindByUserId(user.Id);
 //获取班级集合
 List<Edu_ClaNameFlow> list = edu_ClaNameFlowService.GetListByTeacherId(teacher.Id);
 foreach (Edu_ClaNameFlow item in list)
 {
 Dictionary<string, string> dic = new Dictionary<string, string>();
 dic.Add("id", "level0" + item.Calss.Id.ToString());
 dic.Add("pId", "0");
 dic.Add("name", item.Gra.Name + item.Calss.Name);
 dic.Add("isParent", "true");
 dicList.Add(dic);
 }
 #endregion
 }
 else
 {
 if (level == "0")
 {
 //加载学生
 List<Edu_Student> list = edu_StudService.GetListByClassId(id.Replace("level0", ""));
 foreach (Edu_Student item in list)
 {
 Dictionary<string, string> dic = new Dictionary<string, string>();
 dic.Add("id", "level1" + item.Id.ToString());
 dic.Add("pId", id);
 dic.Add("name", item.Name);
 dic.Add("isParent", "false");
 dicList.Add(dic);
 }
 }
 }

 echoJson(dicList);
 }

三、基于cookie实现zTree树刷新后,展开状态不变

1、除了引用jQuery和zTree的JS外,引用cookie的JS:

<script type="text/javascript" src="~/Scripts/jquery-treeview/lib/jquery.cookie.js"></script>

2、JS代码:

$(function () {
 //ztree设置
 var setting = {
 data: {
  simpleData: {
  enable: true,
  idKey: "id",
  pIdKey: "pId",
  rootPId: null
  }
 },
 callback: {
  onExpand: onExpand,
  onCollapse: onCollapse
 }
 };

 $.ajax({
 type: "POST",
 url: "/Tech/TemplateTypeManage/GetData",
 success: function (data) {
  if (data && data.length != 0) {
  $.fn.zTree.init($("#tree"), setting, data);
  var treeObj = $.fn.zTree.getZTreeObj("tree");
  var cookie = $.cookie("z_tree" + window.location);
  if (cookie) {
   z_tree = JSON2.parse(cookie);
   for (var i = 0; i < z_tree.length; i++) {
   var node = treeObj.getNodeByParam('id', z_tree[i])
   treeObj.expandNode(node, true, false)
   }
  }
  }
 }
 });
});//end $

function onExpand(event, treeId, treeNode) {
 var cookie = $.cookie("z_tree" + window.location);
 var z_tree = new Array();
 if (cookie) {
 z_tree = JSON2.parse(cookie);
 }
 if ($.inArray(treeNode.id, z_tree) < 0) {
 z_tree.push(treeNode.id);
 }
 $.cookie("z_tree" + window.location, JSON2.stringify(z_tree))
}

function onCollapse(event, treeId, treeNode) {
 var cookie = $.cookie("z_tree" + window.location);
 var z_tree = new Array();
 if (cookie) {
 z_tree = JSON2.parse(cookie);
 }
 var index = $.inArray(treeNode.id, z_tree);
 z_tree.splice(index, 1);
 for (var i = 0; i < treeNode.children.length; i++) {
 index = $.inArray(treeNode.children[i].id, z_tree);
 if (index > -1) z_tree.splice(index, 1);
 }
 $.cookie("z_tree" + window.location, JSON2.stringify(z_tree))
}

更多关于ztree控件的内容,请参考专题《jQuery插件ztree使用汇总》

以上就是关于树插件zTree异步加载、模糊搜索简单实例讲解,希望对大家的学习有所帮助。

Javascript 相关文章推荐
强制设为首页代码
Jun 19 Javascript
jquery实现盒子下拉效果示例代码
Sep 12 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
Nov 21 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
Sep 26 Javascript
创建自己的jquery表格插件
Nov 25 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
Mar 03 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
Dec 01 Javascript
vue bus全局事件中心简单Demo详解
Feb 26 Javascript
Vue实现用户自定义字段显示数据的方法
Aug 28 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
Dec 06 Javascript
微信小程序实现简单文字跑马灯
May 26 Javascript
js+css实现select的美化效果
Mar 24 #Javascript
基于jQuery Ajax实现上传文件
Mar 24 #Javascript
Angular.js如何从PHP读取后台数据
Mar 24 #Javascript
JavaScript驾驭网页-获取网页元素
Mar 24 #Javascript
JavaScript驾驭网页-CSS与DOM
Mar 24 #Javascript
JavaScript驾驭网页-DOM
Mar 24 #Javascript
常用的JQuery函数及功能小结
Mar 24 #Javascript
You might like
PHP调用三种数据库的方法(3)
2006/10/09 PHP
《PHP边学边教》(04.编写简易的通讯录――视频教程1)
2006/12/13 PHP
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
jQuery简单实现banner图片切换
2014/01/02 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
NodeJS配置HTTPS服务实例分享
2017/02/19 NodeJs
vue实现引入本地json的方法分析
2018/07/12 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
VUE脚手架具体使用方法
2019/05/20 Javascript
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
python遍历目录的方法小结
2016/04/28 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
PyTorch基本数据类型(一)
2019/05/22 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
Python extract及contains方法代码实例
2020/09/11 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
开业庆典答谢词
2014/01/18 职场文书
2014年督导工作总结
2014/11/19 职场文书
行政文员岗位职责
2015/02/04 职场文书
幼师中班个人总结
2015/02/12 职场文书
2015年中秋寄语
2015/07/31 职场文书
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
javascript遍历对象的五种方式实例代码
2021/10/24 Javascript
SpringBoot使用AOP实现统计全局接口访问次数详解
2022/06/16 Java/Android