原文链接:https://blog.csdn.net/jiaqu2177/article/details/80626730

zTree树加载

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

在做项目的时候,我们经常能用到zTree,但是,有的时候,因为树数据过多,而导致树加载很慢,测试超过10000条数据就要加载3秒左右,如果有更多的数据,那用户的体验会是一个什么样子?

今天也是在做项目的时候遇到这个问题,也就来做下笔记!

1、查询数据

  1. @Autowired
  2. private JdbcTemplate jdbcTemplate;
  3.  
  4. @Override
  5. public List<User> findUserList(String areaCode) {
  6. //这里判断是不是第一次进来,如果是,赋给他顶级节点的ID
  7. if(StringUtils.isEmpty(areaCode)) {
  8. areaCode = "";
  9. }
  10. StringBuilder sql = new StringBuilder();
  11. sql.append("SELECT * FROM USER WHERE PART_ID = '" + areaCode + "'");
  12. //判断是否为第一次进来,如果是第一次,则查询顶级节点和下一级节点,如果不是,则只查询当前areaCode的子节点
  13. if("".equals(areaCode)) {
  14. sql.append(" OR ID = '620000'");
  15. }
  16. List<User> list = jdbcTemplate.query(sb.toString(), new Object[] {},new BeanPropertyRowMapper<User>(User.class));
  17. return list;

根据以上的实现层,我们可以拿到数据的list集合,然后就是去拼接ztree需要的json格式数据。

2、拼接 JSON 字符串

  1. @Autowired
  2. private UserService userService;
  3.  
  4. //Controller层,推荐使用post
  5. @RequestMapping(value = "/zTree", method = RequestMethod.POST)
  6. public void areaTree(HttpServletRequest request, HttpServletResponse response) {
  7. //获取异步加载的条件ID
  8. String areaCode = request.getParameter("id");
  9. try {
  10. //获取查询到的数据
  11. List<User> list = userService.findUserList(areaCode);
  12. List<Map<String,String>> ztree = new ArrayList<Map<String, String>>();
  13. if (list != null && !list.isEmpty()) {
  14. int a = ;
  15. //循环list 进行拼接 json 串
  16. for (User user : list) {
  17. a++;
  18. String id = String.valueOf(user.getId());
  19. String pId = String.valueOf(user.getPartId());
  20. Map<String, String> map = new HashMap<String, String>();
  21. map.put("id", id);
  22. map.put("pId",pId);
  23. //这里可以根据自己的业务去筛选那些数据为父节点,那些为子节点
  24. if(id.substring(id.length()-, id.length()).equals("")
  25. {
  26. map.put("isParent","true");//父节点
  27. }else {
  28. map.put("isParent","false");//子节点
  29. }
  30. map.put("name", user.getName());
  31. map.put("title", user.getName());
  32. map.put("viewtype", "");
  33. map.put("regiontype", "");
  34. if(a==) {
  35. map.put("open", "true");//是否展开
  36. }else {
  37. map.put("open", "false");
  38. }
  39. ztree.add(map);
  40. }
  41. }
  42. JSONArray array = JSONArray.fromObject(ztree);
  43. String json = array.toString();
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. }

这样,我们需要的 json 字符串就拼接出来了,下一步,就是要在页面进行显示!

3、页面进行展示

  1. <!-- 树显示的位置 -->
  2. <ul id="ztree" class="ztree"></ul>
  3.  
  4. <!-- 相关js和css引入省略 -->
  5. <script>
  6. $(function() {
  7. //初始化树菜单
  8. zTree = $.fn.zTree.init($("#ztree"), setting);
  9. });
  10. var zTree;
  11. var setting = {
  12. async: {
  13. enable: true,
  14. type:"post",
  15. dataType:'json',
  16. url:"/zTree",//我们之前写的Controller的地址
  17. //此处的id就是节点的id,每次点击之后,会自动根据节点的id去查询节点下的数据,此处写什么,在Controller中获取的name名称就是什么。
  18. //例如 String areaCode = request.getParameter("id");
  19. autoParam:["id"]
  20. },
  21. callback: {
  22. onClick: zTreeOnClick, //树点击事件
  23. onAsyncSuccess: zTreeOnAsyncSuccess //树延迟加载事件
  24. },
  25. view:{
  26. dblClickExpand: false,
  27. showIcon: false, //树菜单的icon图标
  28. },
  29. data: {
  30. simpleData: {
  31. enable: true
  32. }
  33. }
  34. };
  35. var firstAsyncSuccessFlag = ;
  36.  
  37. function zTreeOnAsyncSuccess(event, treeId, treeNode, msg) {
  38. var arry = eval(msg);
  39. var sumProject=;
  40. if (arry.length > && arry[].res_level=="") {
  41. for (var i = ; i < arry.length; i++) {
  42. sumProject += parseInt(arry[i].sumProject);
  43. }
  44. }
  45. if (firstAsyncSuccessFlag == ) {
  46. try {
  47. //调用默认展开第一个结点
  48. var selectedNode = zTree.getSelectedNodes();
  49. var nodes = zTree.getNodes();
  50. zTree.expandNode(nodes[], true);
  51. firstAsyncSuccessFlag = ;
  52. } catch (err) {}
  53. }
  54. }
  55. //点击左侧树
  56. function zTreeOnClick(e, treeId, treeNode){
  57. //点击左侧树的ID
  58. var areaCode = treeNode.id;
  59. //点击左侧树的逻辑处理
  60. }
  61. </script>

Jquery插件 之 zTree树加载的更多相关文章

  1. JQuery插件:遮罩+数据加载中。。。(特点:遮你想遮,罩你想罩)

    在很多项目中都会涉及到数据加载.数据加载有时可能会是2-3秒,为了给一个友好的提示,一般都会给一个[数据加载中...]的提示.今天就做了一个这样的提示框. 先去jQuery官网看看怎么写jQuery插 ...

  2. jquery zTree异步加载的例子

    下面是使用zTree异步加载的一个例子: 1)初始化树的时候是ajax请求,返回nodes列表来初始化树的:如果一开始就异步的话,$.fn.zTree.init($("#zTree" ...

  3. 插件:★★★ !!!图片懒加载 lazyload.js 、 jquery.scrollLoading.js

    插件:图片懒加载 jquery.lazyload.js 2016-3-31 插件说明:http://www.w3cways.com/1765.html (小插件,好用) 下载地址: https://r ...

  4. ztree异步加载

    Ztree异步加载的意思就是: 当点击展开树节点时,才去请求后台action返回点击节点的子节点数据并加载. 直接贴代码(SpringMvc+Mybatis): 前台页面ztreeList.jsp: ...

  5. jQuery瀑布流从不同方向加载3种效果演示

    很实用的一款插件jQuery瀑布流从不同方向加载3种效果演示在线预览 下载地址 实例代码 <section class="grid-wrap"> <ul clas ...

  6. zTree 异步加载

    zTree异步加载数据的简单实现,更为详细的Api请参考 zTree官网   http://www.treejs.cn/ <link href="~/Content/ztree/css ...

  7. 转载:用Jquery实现的图片预加载技术,可以实现有序加载和无序加载!

    一.背景 我们在做页面的时候,从用户体验的角度出发,肯定是希望用户以最快的速度看到完整的页面信息,但在实际情况中经常会遇到些问题. 比如受网速影响,页面加载素材的时间比较长,页面会出现短时间的错乱或者 ...

  8. 启用lazyload插件,减少图片加载

    使用lazyload的js插件,减少图片加载,提高页面加载速度和节省流量.虽然这个头像是第三方服务器来的,不消费博客的流量,但是能节省部分访客的加载时间,也是不错的哦. 用lazyload插件,只是后 ...

  9. 携程Android App插件化和动态加载实践

    携程Android App的插件化和动态加载框架已上线半年,经历了初期的探索和持续的打磨优化,新框架和工程配置经受住了生产实践的考验.本文将详细介绍Android平台插件式开发和动态加载技术的原理和实 ...

随机推荐

  1. Java【第二课 扫描仪 & 布尔数据类型】

    一.Java扫描仪 为了更加方便的理解,我先将逻辑框图 这个有点像C语言的scan()的用法 import java.util.Scanner; //导入扫描仪 public class demo{ ...

  2. Dijkstra+SPFA 模板

    Dijkstra 引用自:点击打开链接 #include <algorithm> #include <cstdio> #include <cstring> #inc ...

  3. SpringBoot原理—分析SpringBoot启动机制(starter机制)

    一:前言使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程.本文的目的就是一步步分析springboot的启动过 ...

  4. Saltshaker 开源的基于Saltstack的Web 配管工具,欢迎使用

    Saltshaker是基于saltstack开发的以Web方式进行配置管理的运维工具,简化了saltstack的日常使用,丰富了saltstack的功能,支持多Master的管理. 已经在GitHub ...

  5. Codeforces Round #578 (Div. 2) 二维差分 可做模板

    题意: 在n*n的矩阵中,你可以选择一个k*k的子矩阵,然后将这个子矩阵中的所有B全部变为W,问你怎么选择这个子矩阵使得最终的矩阵中某一行全是W或者某一列全是W的个数最多 题解:考虑每一行和每一列,对 ...

  6. C语言 while

    C语言 while while 语句 流程图 案例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stri ...

  7. mysql错误:Column count doesn't match value count at row 1解决办法

    这个错误的意思是存储的数据与数据库表的字段类型定义不匹配,解决办法如下: 1.查看插入数据的类型与表中字段的类型是否匹配2.插入数据的顺序与字段顺序是否匹配3.检查SQL是否拼写错误4.在insert ...

  8. OI学习之路上的宝藏网站/App分享

    OI学习之路上的宝藏网站/App分享 想要变强吗少年?这里有各种我平时收集的网站/App,它们可以帮助你更好地学习算法或者找到解题思路.废话不多说,快来打开新世界的大门罢~ 知识学习 觉得各种知识晦涩 ...

  9. vue.js事件传值之子组件传向父组件以及$emit的使用

    在项目开发中,有时候会遇到一种需求比如是:在子组件中,通过一个事件,比如点击事件,去改变父组件中的某个值,下面来看看是怎么个流程 还是先截图目录结构 父组件为app.vue,components中的文 ...

  10. javascript控制台 js的调试

    一.错误查询,按F12键,点击控制台.