Jquery LigerUI Tree是Jquery LigerUI()的插件之一,使用它可以快速的构建树形菜单。呵呵 废话不说了,直入正题,下面介绍C#结合ligerui 构造树形菜单的两种方法

1、ID/PID格式

JqueryLigerUI官网上的例子是这样的:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5     <script src="../../lib/jquery/jquery-1.3.2.min.js" type="text/javascript"></script>
 6     <link href="../../lib/ligerUI/skins/Aqua/css/ligerui-all.css" rel="stylesheet" type="text/css" />
 7     <script src="../../lib/ligerUI/js/core/base.js" type="text/javascript"></script>
 8     <script src="../../lib/ligerUI/js/plugins/ligerTree.js" type="text/javascript"></script>
 9     <script type="text/javascript">
10         $(function ()
11         {
12             var data = [];
13
14             data.push({ id: 1, pid: 0, text: '1' });
15             data.push({ id: 2, pid: 1, text: '1.1' });
16             data.push({ id: 4, pid: 2, text: '1.1.2' });
17             data.push({ id: 5, pid: 2, text: '1.1.2' });
18
19             data.push({ id: 10, pid: 8, text: 'wefwfwfe' });
20             data.push({ id: 11, pid: 8, text: 'wgegwgwg' });
21             data.push({ id: 12, pid: 8, text: 'gwegwg' });
22
23             data.push({ id: 6, pid: 2, text: '1.1.3', ischecked: true });
24             data.push({ id: 7, pid: 2, text: '1.1.4' });
25             data.push({ id: 8, pid: 7, text: '1.1.5' });
26             data.push({ id: 9, pid: 7, text: '1.1.6' });
27
28             $("#tree1").ligerTree({
29             data:data,
30             idFieldName :'id',
31             parentIDFieldName :'pid'
32             }
33             );
34         });
35     </script>
36 </head>
37 <body style="padding:10px">
38     <div style="width:200px; height:300px; margin:10px; float:left; border:1px solid #ccc; overflow:auto;  ">
39     <ul id="tree1"></ul>
40     </div>
41
42         <div style="display:none">
43     <!--  数据统计代码 -->
44     </div>
45 </body>
46 </html>

Jquery LigerUI Tree官方示例源代码

很明显,通过研究其数据格式可以知道以下几点

1、数据类型为Json数据

2、数据格式为{id:"0",pid:"-1",text:"0000"},其中id为节点Id,pid为数据的父节点id,text则为节点显示名称

这样以来,我们就可以将自己的数据格式构造成如上所示的数据格式,下面贴出C#示例代码

 1     /// <summary>
 2         /// 获取节点数据集合
 3         /// </summary>
 4         /// <param name="organList">节点元数据,从数据库获得</param>
 5         /// <returns>返回节点数据集合</returns>
 6         public object GetNodeTreeData(IEnumerable<OrganDto> organList) {
 7             StringBuilder jsonString = new StringBuilder();
 8             //开始构造树格式
 9             jsonString.Append("[");
10             //指定Id,PId创建树
11             foreach (var item in organList) {
12                 jsonString.Append("{id:\"" + item.ID + "\",pid:\"" + item.ParentID + "\",text:\"" + item.X + "(" + item.Xdm + ")\"},");
13             }
14             //删除字符串最后一个,
15             jsonString = jsonString.Remove(jsonString.Length - 1, 1);
16             //树格式构造完成
17             jsonString.Append("]");
18             return jsonString;
19         }

C#转换数据位树格式的处理方法

转换完成之后,将数据作为对象返回到前台

        /// <summary>/// 初始化树/// </summary>/// <param name="year">当前选中年份</param>/// <returns>返回树节点数据</returns>public string InitTree(int? year) {List<int> organYearList = GetOrganYear();if (year == null || year == 0) {//获取默认年份year = organYearList[0];}//获取组织机构信息IEnumerable<OrganDto> organList = this.db.Organs.Where(p => p.AGraduateYear == year || p.AGraduateYear == 0).ToList().Select(p => CovertEntityToDto(p));object obj = GetNodeTreeData(organList);return obj.ToString();}

返回树数据对象到前台页面

这样后台处理完成,前台就按照Jquery LigerUi的初始化树的方法进行调用,将数据接收并初始化显示树

 1         $.ajax({
 2             type: 'get',
 3             url: '/Tree/InitTree?year=' + year,
 4             success: function (data) {
 5                 //...问题  JSON.parse: expected property name or '}'
 6                 //var json = $.parseJSON(data);
 7
 8                 $("#tree3").ligerTree({
 9                     checkbox: false,
10                     parentIcon: null,
11                     childIcon: null,
12                     nodeWidth: 230,
13                     data: eval("(" + data + ")"), // 数据格式转换为Json,也可使用$.parseJSON函数
14                     idFieldName :'id',
15                     parentIDFieldName :'pid',
16                     onSelect: function (node) {
17                         var date = new Date();
18                         var getRightPartOfStr = node.data.text.split('(');
19                         //获取系代码
20                         var xdm = $.trim(getRightPartOfStr[1].split(')')[0]);
21                         document.getElementById('getData').value = xdm;
22                         //获取时间
23                         var getYear = $('#changeYear').find('option:selected').attr('value');
24                         $.getJSON('/Tree/GetTreeNodeData', { 'Xdm': xdm, 'Year': getYear, 'tsm': date.getMilliseconds() }, function (para) {
25                             $.each(para, function (i, v) {
26                                 document.getElementById('ID').value = v.ID;
27                                 document.getElementById('Xdm').value = v.Xdm;
28                                 document.getElementById('X').value = v.X;
29
30                                 //--- 不能用$,具体原因不详 ---
31                                 document.getElementById("Xqc").value = v.Xqc;
32                                 document.getElementById("Ywm").value = v.Ywm;
33                                 document.getElementById("AGraduateYear").value = v.AGraduateYear;
34                                 document.getElementById("ParentID").value = v.ParentID;
35                             });
36                         });
37                     }
38                 });
39             }
40         });

Juqery LigerUi初始化显示树

大功告成,这样树就可以如愿以偿的显示出来了。

2、Data格式/直接将所需要的格式拼接为树的层级格式

这种方式,Jquery LigerUI官网上并没有具体说明,但在使用url构造树时用到了这种数据格式,经过剖析(过程省略...),其数据格式如下:

 1 [
 2     { text: '节点1', children: [
 3         { text: '节点1.1' },
 4         { text: '节点1.2' },
 5         { text: '节点1.3', children: [
 6                 { text: '节点1.3.1' ,children: [
 7                     { text: '节点1.3.1.1' },
 8                     { text: '节点1.3.1.2' }]
 9                 },
10                 { text: '节点1.3.2' }
11         ]
12         },
13         { text: '节点1.4' }
14         ]
15     },
16     { text: '节点2' },
17     { text: '节点3' },
18     { text: '节点4' }
19 ]

Jquery LigerUI直接构造树的数据格式

知道了数据的格式,那我们要做的就是把自己的数据转换(或者称为封装)成这种格式的数据,那我们就可以实现我们想要的树图了,下面我们就看一下我的实现思路

1、按照格式,拼接树形数据。这里使用递归函数

2、净化树形数据并返回到前台

下面我们看一下C#代码

 1         /// <summary>
 2         /// 递归创建树
 3         /// </summary>
 4         /// <param name="item"></param>
 5         /// <param name="jsonString"></param>
 6         /// <param name="organList"></param>
 7         void Test(OrganDto item, StringBuilder jsonString, IEnumerable<OrganDto> organList) {
 8             //判断是否有下级节点,如果有子节点,输出子节点
 9             bool isLeaf = IsLeaf(item.ID);
10             //添加根节点
11             jsonString.Append("{text:\"" + item.X + "(" + item.Xdm + ")\"");
12             var n = organList.Where(p => p.ParentID == item.ID).Count();
13             int temJ = 0;
14             if (isLeaf) {
15                 jsonString.Append(",children:[");
16                 //...输出子节点
17                 foreach (var child in organList.Where(p => p.ParentID == item.ID)) {
18                     temJ++;
19                     Test(child, jsonString, organList);
20                 }
21                 jsonString.Append("]},");
22
23             }
24             else {
25                 jsonString.Append("},");
26             }
27         }

直接拼接树形数据格式实现方法

调用该函数

 1     /// <summary>
 2         /// 获取节点数据集合
 3         /// </summary>
 4         /// <param name="organList">节点元数据,从数据库获得</param>
 5         /// <returns>返回节点数据集合</returns>
 6         public object GetNodeTreeData(IEnumerable<OrganDto> organList) {
 7             StringBuilder jsonString = new StringBuilder();
 8             //开始构造树格式
 9             jsonString.Append("[");
10
11             foreach (var item in organList) {
12                 if (item.ParentID == -1) {
13                     Test(item, jsonString, organList);
14                 }
15             }
16             jsonString.Append("]");
17             //....删除多余','号
18             string[] test = jsonString.ToString().Split(']');
19             jsonString.Clear();
20             foreach (var item in test) {
21                 if (item != "") {
22                     jsonString.Append(item.Remove(item.Length - 1, 1) + "]");
23                 }
24             }
25
26             return jsonString;
27         }

调用该函数

这样以来,我们的C#构造的树数据就构造完成了,下面就要接收树数据,构造初始化显示树

1  $("#tree3").ligerTree({
2                     checkbox: false,
3                     parentIcon: null,
4                     childIcon: null,
5                     nodeWidth: 230,
6                     data: eval("(" + data + ")") // 数据格式转换为Json,也可使用$.parseJSON函数
7 });

直接构造树数据 --- 初始化显示树

OK,使用这种方式构造树完成。

下面贴上Juqery LigerUI的官方链接

演示地址:http://www.ligerui.com/

api地址:http://api.ligerui.com/

官方论坛: http://bbs.ligerui.com/

下载地址:http://git.oschina.net/ligerui/LigerUI/

转载于:https://www.cnblogs.com/AlphaThink-AT003/p/3564236.html

C#结合Jquery LigerUI Tree插件构造树相关推荐

  1. 8 个最好的 jQuery 树形 Tree 插件

    由于其拥有庞大,实用的插件库,使得jQuery变得越来越流行.今天将介绍一些最好的jQuery树形视图插件,具有扩展和可折叠的树视图.这些都是轻量级的,灵活的jQuery插件,它将一个无序列表转换为可 ...

  2. html树插件,推荐8款jQuery轻量级树形Tree插件

    由于其拥有庞大,实用的插件库,使得jQuery变得越来越流行.今天将介绍一些最好的jQuery树形视图插件,具有扩展和可折叠的树视图.这些都是轻量级的,灵活的jQuery插件,它将一个无序列表转换为可 ...

  3. jQuery LigerUI 插件介绍及使用之ligerTree

    一,简介  ligerTree的功能列表: 1,支持本地数据和服务器数据(配置data或者url) 2,支持原生html生成Tree 3,支持动态获取增加/修改/删除节点 4,支持大部分常见的事件 5 ...

  4. zTree 一个依靠 jQuery 实现的多功能 “树插件”

    http://www.ztree.me/v3/demo.php#_101 zTree 是一个依靠 jQuery 实现的多功能 "树插件".优异的性能.灵活的配置.多种功能的组合是 ...

  5. easyui treegrid php,jQuery EasyUI 数据网格与树插件 – Treegrid 树形网格 | 菜鸟教程

    jQuery EasyUI 数据网格与树插件 - Treegrid 树形网格 jQuery EasyUI 插件 扩展自 $.fn.datagrid.defaults.通过 $.fn.treegrid. ...

  6. Device Tree Overlays:”插件“设备树

    Device Tree Overlays:"插件"设备树 传统设备树 批量管理硬件资源,机制僵化 "插件"设备树 模块化管理硬件资源,灵活定制 使用前提 内核配 ...

  7. 114 Device Tree Overlays:”插件“设备树

    传统设备树 批量管理硬件资源,机制僵化 "插件"设备树 模块化管理硬件资源,灵活定制 使用前提 内核配置 CONFIG_OF_OVERLAY = y CONFIG_OF_CONFI ...

  8. jQuery LigerUI 使用教程表格篇(1)

    阅读目录 第一个例子 数据结构 两种绑定数据的方式 配置column 自定义表头 自定义单元格 排序与分页 事件与方法 第一个例子 简介 ligerGrid是ligerui系列插件的核心控件,用户可以 ...

  9. jQuery LigerUI 使用教程入门篇

    jQuery LigerUI 使用教程入门篇 阅读目录 获取最新代码 ligerUI是什么 如何使用 如何扩展 获取最新代码 可以到http://ligerui.googlecode.com下载最新代 ...

最新文章

  1. P1083 借教室(标记永久化线段树/二分+前缀和)难度⭐⭐⭐★
  2. ProxyStrike运行bug解决办法
  3. 《数据库SQL实战》从titles表获取按照title进行分组
  4. 服务器虚拟化分为半,服务器虚拟化有哪些?
  5. win7 远程桌面 复制粘贴
  6. php 错误提示模板,php 关闭错误提示方法总结与性能分析
  7. 开奖及送书|《Vue.js权威指南》
  8. 开课吧Java课堂:小应用程序基础是什么
  9. 重装系统——Win10系统U盘启动盘制作教程(MSDN自带纯净版)
  10. word 插入公式技巧
  11. PS使模糊图片变清晰
  12. 用python解决放苹果问题_[18/11/24] 递归解决-放置苹果问题
  13. 收发器(Transceiver)架构1——接收机1
  14. 【.NET】IQueryable扩展方法实现复杂查询条件
  15. vue组件中校验身份证号,手机号和邮箱
  16. 封装一个自己的golang操作MySQL数据库工具
  17. 关于PolarCode方案被5G标准采纳这件事
  18. 【x86架构】SMM
  19. 雅虎通推出 PingMe 服务,酷!
  20. 图的遍历(深度优先遍历DFS,广度优先遍历BFS)以及C语言的实现

热门文章

  1. 复练-面试的科技树-我是谁、我喜欢、我能够
  2. python3迭代器和可迭代对象,Python3学习(8)--迭代,可迭代的和迭代器
  3. 主板没有rgb接口怎么接灯_老电脑也玩一下RGB,一次酷冷至尊MB400L智瞳机箱安装体验...
  4. wireshark使用_使用 Wireshark 抓取数据包
  5. FTP安装及用户及权限配置
  6. ajax 获取openid,纯前端获取当前用户的openid(微信小程序)
  7. android intent enum,enum类型被intent所携带时需要注意的地方
  8. 2017下半年网络规划设计师考试上午真题
  9. 给你的网站添加3D地球显示的访客统计(使用RevolverMaps)
  10. scrapy 图片url 转base64_一文快速掌握 scrapy 爬虫框架