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 相关文章推荐
13个绚丽的Jquery 界面设计网站推荐
Sep 28 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
Nov 22 Javascript
node.js实现逐行读取文件内容的代码
Jun 27 Javascript
javascript实现微信分享
Dec 23 Javascript
jQuery时间轴插件使用详解
Jul 16 Javascript
jQuery实现简单的图片查看器
Sep 11 Javascript
jQuery实现的左右移动焦点图效果
Jan 14 Javascript
微信小程序 http请求详细介绍
Oct 09 Javascript
微信公众号菜单配置微信小程序实例详解
Mar 31 Javascript
BootStrap给table表格的每一行添加一个按钮事件
Sep 07 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
Feb 05 Javascript
webpack+express实现文件精确缓存的示例代码
Jun 11 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
推荐25款php中非常有用的类库
2014/09/29 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
PHP+ajax实现获取新闻数据简单示例
2018/05/08 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
jQuery实现图片放大预览实现原理及代码
2013/09/12 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
[01:06]欢迎来到上海,TI9
2018/08/26 DOTA
python 安装virtualenv和virtualenvwrapper的方法
2017/01/13 Python
python实现Floyd算法
2018/01/03 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
Python守护进程实现过程详解
2020/02/10 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
如何强制垃圾回收
2015/10/06 面试题
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
2014年社区庆元旦活动方案
2014/03/08 职场文书
积极向上的团队口号
2014/06/06 职场文书
开服装店计划书
2014/08/15 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
办理房产过户的委托书
2014/09/14 职场文书
2015年推普周活动总结
2015/03/27 职场文书
聊聊redis-dump工具安装问题
2022/01/18 Redis