当前位置:Gxlcms > JavaScript > jquery zTree异步加载、模糊搜索简单实例分享

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

时间:2021-07-01 10:21:17 帮助过:61人阅读

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

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

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

  1. <script type="text/javascript">
  2. //ztree设置
  3. var setting = {
  4. view: {
  5. fontCss: getFontCss
  6. },
  7. check: {
  8. enable: true
  9. },
  10. data: {
  11. simpleData: {
  12. enable: true,
  13. idKey: "id",
  14. pIdKey: "pId",
  15. rootPId: 0
  16. }
  17. },
  18. async: {
  19. enable: true,
  20. url: "#{getStudentsJsonUrl}",
  21. autoParam: ["id", "level"]
  22. },
  23. callback: {
  24. beforeCheck: zTreeBeforeCheck,
  25. onNodeCreated: zTreeOnNodeCreated,
  26. beforeExpand: zTreeBeforeExpand
  27. }
  28. };
  29. var reloadFlag = false; //是否重新异步请求
  30. var checkFlag = true; //是否选中
  31. //节点展开前
  32. function zTreeBeforeExpand(treeId, treeNode) {
  33. reloadFlag = false;
  34. return true;
  35. };
  36. //节点创建后
  37. function zTreeOnNodeCreated(event, treeId, treeNode) {
  38. var zTree = $.fn.zTree.getZTreeObj(treeId);
  39. if (reloadFlag) {
  40. if (checkFlag) {
  41. zTree.checkNode(treeNode, true, true);
  42. }
  43. if (!treeNode.children) {
  44. zTree.reAsyncChildNodes(treeNode, "refresh");
  45. }
  46. }
  47. };
  48. //选中节点前
  49. function zTreeBeforeCheck(treeId, treeNode) {
  50. var zTree = $.fn.zTree.getZTreeObj(treeId);
  51. if (!treeNode.children) {
  52. reloadFlag = true;
  53. checkFlag = true;
  54. zTree.reAsyncChildNodes(treeNode, "refresh");
  55. }
  56. return true;
  57. }
  58. //页面加载完成
  59. _run(function () {
  60. require(['zTree/js/jquery.ztree.all-3.5'], function () {
  61. $.ajax({
  62. type: "POST",
  63. url: "#{getStudentsJsonUrl}",
  64. success: function (data) {
  65. if (data && data.length != 0) { //如果结果不为空
  66. $.fn.zTree.init($("#tree"), setting, data);
  67. }
  68. else { //搜索不到结果
  69. }
  70. }
  71. });
  72. });
  73. //提交
  74. $("#inputSubmit").click(function () {
  75. var zTree = $.fn.zTree.getZTreeObj("tree");
  76. var nodes = zTree.getCheckedNodes(true);
  77. var ids = "";
  78. var names = "";
  79. for (var i = 0; i < nodes.length; i++) { //遍历选择的节点集合
  80. if (!nodes[i].isParent) {
  81. ids += nodes[i].id.replace("level" + nodes[i].level, "") + ",";
  82. names += nodes[i].name + ",";
  83. }
  84. }
  85. Simpo.ui.box.hideBox();
  86. parent.$(".boxFrm").contents().find("#inputRange").val(names.substr(0, names.length - 1));
  87. parent.$(".boxFrm").contents().find("#hidRange").val(ids.substr(0, ids.length - 1));
  88. })
  89. });
  90. //查找节点
  91. var lastNodeList = [];
  92. var lastKey;
  93. function searchNode() {
  94. var zTree = $.fn.zTree.getZTreeObj("tree");
  95. var key = $.trim($("#inputSearchNode").val());
  96. if (key != "" && key != lastKey) {
  97. nodeList = zTree.getNodesByParamFuzzy("name", key);
  98. for (var i = 0, l = lastNodeList.length; i < l; i++) { //上次查询的节点集合取消高亮
  99. lastNodeList[i].highlight = false;
  100. zTree.updateNode(lastNodeList[i]);
  101. }
  102. zTree.expandAll(false); //全部收缩
  103. if (nodeList.length > 0) {
  104. for (var i = 0, l = nodeList.length; i < l; i++) { //遍历找到的节点集合
  105. if (nodeList[i].getParentNode()) {
  106. zTree.expandNode(nodeList[i].getParentNode(), true, false, false); //展开其父节点
  107. }
  108. nodeList[i].highlight = true;
  109. zTree.updateNode(nodeList[i]);
  110. }
  111. }
  112. zTree.refresh(); // 很重要,否则节点状态更新混乱。
  113. lastNodeList = nodeList;
  114. lastKey = key;
  115. }
  116. }
  117. //加载数据
  118. function loadData() {
  119. var zTree = $.fn.zTree.getZTreeObj("tree");
  120. var rootNodes = zTree.getNodes();
  121. reloadFlag = true;
  122. checkFlag = false;
  123. for (var i = 0; i < rootNodes.length; i++) {
  124. if (!rootNodes[i].children) {
  125. zTree.reAsyncChildNodes(rootNodes[i], "refresh"); //异步加载
  126. }
  127. }
  128. }
  129. //全部收缩
  130. function closeAll() {
  131. var zTree = $.fn.zTree.getZTreeObj("tree");
  132. if ($("#inputCloseAll").val() == "全部收缩") {
  133. zTree.expandAll(false);
  134. $("#inputCloseAll").val("全部展开")
  135. }
  136. else {
  137. zTree.expandAll(true);
  138. $("#inputCloseAll").val("全部收缩")
  139. }
  140. }
  141. //高亮样式
  142. function getFontCss(treeId, treeNode) {
  143. return (treeNode.highlight) ? { color: "#A60000", "font-weight": "bold"} : { color: "#333", "font-weight": "normal" };
  144. }
  145. </script>
  1. <div style="width: 200px; height: 260px; overflow: auto; border: solid 1px #666;">
  2. <ul id="tree" class="ztree">
  3. </ul>
  4. </div>

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

  1. public void SelStudent()
  2. {
  3. set("getStudentsJsonUrl", to(GetStudentsJson));
  4. }
  5. public void GetStudentsJson()
  6. {
  7. List<Dictionary<string, string>> dicList = new List<Dictionary<string, string>>();
  8. string level = ctx.Post("level");
  9. string id = ctx.Post("id");
  10. if (strUtil.IsNullOrEmpty(id))
  11. {
  12. #region 加载班级
  13. //获取当前登录用户
  14. Sys_User user = AdminSecurityUtils.GetLoginUser(ctx);
  15. //获取当前用户关联的老师
  16. Edu_Teacher teacher = edu_TeacService.FindByUserId(user.Id);
  17. //获取班级集合
  18. List<Edu_ClaNameFlow> list = edu_ClaNameFlowService.GetListByTeacherId(teacher.Id);
  19. foreach (Edu_ClaNameFlow item in list)
  20. {
  21. Dictionary<string, string> dic = new Dictionary<string, string>();
  22. dic.Add("id", "level0" + item.Calss.Id.ToString());
  23. dic.Add("pId", "0");
  24. dic.Add("name", item.Gra.Name + item.Calss.Name);
  25. dic.Add("isParent", "true");
  26. dicList.Add(dic);
  27. }
  28. #endregion
  29. }
  30. else
  31. {
  32. if (level == "0")
  33. {
  34. //加载学生
  35. List<Edu_Student> list = edu_StudService.GetListByClassId(id.Replace("level0", ""));
  36. foreach (Edu_Student item in list)
  37. {
  38. Dictionary<string, string> dic = new Dictionary<string, string>();
  39. dic.Add("id", "level1" + item.Id.ToString());
  40. dic.Add("pId", id);
  41. dic.Add("name", item.Name);
  42. dic.Add("isParent", "false");
  43. dicList.Add(dic);
  44. }
  45. }
  46. }
  47. echoJson(dicList);
  48. }

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

1、除了引用jQuery和zTree的JS外,引用cookie的JS:
代码如下:<script type="text/javascript" src="~/Scripts/jquery-treeview/lib/jquery.cookie.js"></script>

2、JS代码:

  1. $(function () {
  2. //ztree设置
  3. var setting = {
  4. data: {
  5. simpleData: {
  6. enable: true,
  7. idKey: "id",
  8. pIdKey: "pId",
  9. rootPId: null
  10. }
  11. },
  12. callback: {
  13. onExpand: onExpand,
  14. onCollapse: onCollapse
  15. }
  16. };
  17. $.ajax({
  18. type: "POST",
  19. url: "/Tech/TemplateTypeManage/GetData",
  20. success: function (data) {
  21. if (data && data.length != 0) {
  22. $.fn.zTree.init($("#tree"), setting, data);
  23. var treeObj = $.fn.zTree.getZTreeObj("tree");
  24. var cookie = $.cookie("z_tree" + window.location);
  25. if (cookie) {
  26. z_tree = JSON2.parse(cookie);
  27. for (var i = 0; i < z_tree.length; i++) {
  28. var node = treeObj.getNodeByParam('id', z_tree[i])
  29. treeObj.expandNode(node, true, false)
  30. }
  31. }
  32. }
  33. }
  34. });
  35. });//end $
  36. function onExpand(event, treeId, treeNode) {
  37. var cookie = $.cookie("z_tree" + window.location);
  38. var z_tree = new Array();
  39. if (cookie) {
  40. z_tree = JSON2.parse(cookie);
  41. }
  42. if ($.inArray(treeNode.id, z_tree) < 0) {
  43. z_tree.push(treeNode.id);
  44. }
  45. $.cookie("z_tree" + window.location, JSON2.stringify(z_tree))
  46. }
  47. function onCollapse(event, treeId, treeNode) {
  48. var cookie = $.cookie("z_tree" + window.location);
  49. var z_tree = new Array();
  50. if (cookie) {
  51. z_tree = JSON2.parse(cookie);
  52. }
  53. var index = $.inArray(treeNode.id, z_tree);
  54. z_tree.splice(index, 1);
  55. for (var i = 0; i < treeNode.children.length; i++) {
  56. index = $.inArray(treeNode.children[i].id, z_tree);
  57. if (index > -1) z_tree.splice(index, 1);
  58. }
  59. $.cookie("z_tree" + window.location, JSON2.stringify(z_tree))
  60. }

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

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

人气教程排行