下载jstree.js下载地址: http://jstree.com/

当前下载版本: jsTree 3.3.1

第一步:下载完成后引用js+css

  1. <link href="~/plugs/dist/themes/default/style.min.css" rel="stylesheet" />
  2. <script src="~/plugs/dist/jstree.min.js"></script>

第二步:添加jstree容器

  1. <div id="jstree_list">
  2.  
  3. </div>

第三步:初始化jstree配置,为其指定数据源

  1. $('#jstree_list').jstree({
  2. 'core': {
  3. 'multiple': false,//能否选中多个节点
  4. 'data': {
  5. url: '/Mobile/Count/GetModuleList',//获取数据源地址
  6. dataType:'json',//返回数据源类型json
  7. data: function (node) {
  8. return { 'parentid': node.id == '#' ? "0" : node.id };//定义一个为前面url传递的参数
  9. }
  10. }
  11. }
  12. });

第四步:指定节点选中事件

  1. //选中事件
  2. $('#jstree_list').on('changed.jstree', function (e, data) {
  3. var i, j, r = [];
  4. for (i = 0, j = data.selected.length; i < j; i++) {
  5. //只做单个节点选中
  6. r["text"] = data.instance.get_node(data.selected[i]).text;
  7. r["id"] = data.instance.get_node(data.selected[i]).id;
  8. }
  9. });

以上所有方法需要在页面加载完执行

jstree非常灵活和强大可以指定多种数据源,这里只说明json格式数据源,也是较常用的数据源格式。

第五步:创建jstree数据源

  1. public string GetModuleList()
  2. {
  3. var appModule = _dbs.DataBase.GetCollection<AppModule>("config_app_module");
  4. var appmoduleall = appModule.FindAllAs<AppModule>().ToList();
  5. var rootmodule = appmoduleall.Where(e => e.pid.Equals()).ToList();
  6.  
  7. StringBuilder strb = new StringBuilder();
  8. strb.Append("[");
  9. //定义递归方法
  10. Func<int, int> GetChildrenModule = null;
  11. GetChildrenModule = id =>
  12. {
  13. var childrenmodules = appmoduleall.Where(e => e.pid.Equals(id)).ToList();
  14. if (childrenmodules.Count() > )
  15. {
  16. strb.AppendFormat(", \"children\":[");
  17. foreach (var cm in childrenmodules)
  18. {
  19. strb.Append("{");
  20. strb.AppendFormat("\"id\":\"{0}\"", cm._id);
  21. strb.AppendFormat(", \"text\":\"{0}\"", cm.amname);
  22. GetChildrenModule(cm._id);
  23. if (childrenmodules.IndexOf(cm) == (childrenmodules.Count - ))
  24. {
  25. strb.Append("}");
  26. }
  27. else
  28. {
  29. strb.Append("},");
  30. }
  31. }
  32. strb.AppendFormat("]");
  33. }
  34. return childrenmodules.Count();
  35. };
  36.  
  37. //遍历根节点
  38. foreach (var item in rootmodule)
  39. {
  40. strb.Append("{");
  41. strb.AppendFormat("\"id\":\"{0}\"", item._id);
  42. strb.AppendFormat(", \"text\":\"{0}\"", item.amname);
  43. GetChildrenModule(item._id);
  44. if (rootmodule.IndexOf(item) == (rootmodule.Count - ))
  45. {
  46. strb.Append("}");
  47. }
  48. else
  49. {
  50. strb.Append("},");
  51. }
  52.  
  53. }
  54. strb.Append("]");
  55. return strb.ToString();
  56. }
  57. }

第六步:执行效果

还有皮肤,编辑,拓展等扩展属性,有需要可以再研究。

C#应用jstree实现无限级节点的方法的更多相关文章

  1. 查找html节点的方法

    document.firstChild document.documentElement(兼容性较好) 查找body节点的方法 document.firstChild.lastChild docume ...

  2. OSG中找到特定节点的方法

    OSG中找到特定节点的方法 转自:http://38288890.blog.163.com/blog/static/19612845320072721549504/ 为了在OSG中找到需要的节点并对节 ...

  3. OSG中找到特定节点的方法(转)

    OSG中找到特定节点的方法 为了在OSG中找到需要的节点并对节点做出相应的操作,可以从NodeVisitor类中继承一个类,NPS的教程 [download id="14"] 阐述 ...

  4. 修复jquery.treeview的增加子节点的方法的bug

    1.修复理由 在一个android项目中用到了treeview控件(本来自己通过android的原生api实现了一个http://www.cnblogs.com/Mr-Nobody/p/3527688 ...

  5. jQuery获取父级、兄弟节点的方法

    一.jQuery的父节点查找方法 $(selector).parent(selector):获取父节点 $(selector).parentNode:以node[]的形式存放父节点,如果没有父节点,则 ...

  6. [SQL]T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)

    T-Sql 递归查询(给定节点查所有父节点.所有子节点的方法)   -- 查找所有父节点with tab as( select Type_Id,ParentId,Type_Name from Sys_ ...

  7. [转]Javascript removeChild()删除节点及删除子节点的方法(同样适用于jq)

    Javascript removeChild()删除节点及删除子节点的方法 这篇文章主要介绍了Javascript removeChild()删除节点及删除子节点的方法的相关资料,需要的朋友可以参考下 ...

  8. ThinkPHP自动填充实现无限级分类的方法

    这篇文章主要介绍了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP项目开发中非常实用的一个技巧,需要的朋友可以参考下   本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是 ...

  9. js项目第一课:获取节点的方法有三个

    第一种方法: demo.html代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...

随机推荐

  1. Hierarchical RNN

    https://blog.csdn.net/liuchonge/article/details/73610734 https://blog.csdn.net/triplemeng/article/de ...

  2. difference among String,StringBuilder,StringBuffer

    difference among String,StringBuilder,StringBuffer String常用构造函数 String(byte[] bytes) String(byte[] b ...

  3. HDU 4639 Hehe 2013 Multi-University Training Contest 4

    题意大致如下:屌丝找女神聊天,女神回了一句 hehe ,而我们都知道 Hehe 有两个意思,一个就是 Hehe ,另外一个则是 wqnmlgb (我去年买了个表) ,所以屌丝很纠结,于是开始思考到底女 ...

  4. Java 源码解析

    Object equals方法对比两个对象是否是内存中同一个物理地址 hashCode规定,当两个对象相等时,必须返回相等的hashCode,所以重写equals方法有必要重写hashCode方法 如 ...

  5. linux---三剑客

    linux的三剑客分别为awk/sed/grep,是运维人员必不可少的常用命令. 一:awk取列 awk ‘{print $1 “ ” $2}’ old.txt awk /aaa/ old.txt 二 ...

  6. 对中文进行MD5加密的注意事项(Java版,编码问题)

    http://blog.csdn.net/tongdao/article/details/20690187 在工作中需要和第三方进行Http通信,在通信内容中有几个参数涉及到了中文.自己在进行MD5加 ...

  7. HIDL学习笔记

    一.HIDL简单介绍 HIDL是Android8.0新出的一个技能,以service和client的方式实现hal接口,目的是想使Android系统和BSP解绑,使系统升级更加方便.HIDL的使用方法 ...

  8. Gravitee.io Access Management 组件

    Access Management组件在Gravitee.io 主要是进行认证以及权鉴的处理,支持oauth2 以及openid connect 等协议,同时好多功能已经集成在ui 管理界面上了,还是 ...

  9. 数学 它的内容,方法和意义 第二卷 (A. D. 亚历山大洛夫 著)

    第五章 常微分方程 1. 绪论 2. 常系数线性微分方程 3. 微分方程的解及应注意的几个方面 4. 微分方程积分问题的几何解释.问题的推广 5. 微分方程解的存在性与唯一性方程的近似解 6. 奇点 ...

  10. python之路---10 *args **kwargs 命名空间 作用域 函数的嵌套

    二十八.函数进阶 1.   "*"  和  "**" ① 在形参位置时   都是聚合的作用 *args    位置参数→元组 **kwargs   关键字参数→ ...