C#应用jstree实现无限级节点的方法
下载jstree.js下载地址: http://jstree.com/
当前下载版本: jsTree 3.3.1
第一步:下载完成后引用js+css
<link href="~/plugs/dist/themes/default/style.min.css" rel="stylesheet" />
<script src="~/plugs/dist/jstree.min.js"></script>
第二步:添加jstree容器
<div id="jstree_list"> </div>
第三步:初始化jstree配置,为其指定数据源
$('#jstree_list').jstree({
'core': {
'multiple': false,//能否选中多个节点
'data': {
url: '/Mobile/Count/GetModuleList',//获取数据源地址
dataType:'json',//返回数据源类型json
data: function (node) {
return { 'parentid': node.id == '#' ? "0" : node.id };//定义一个为前面url传递的参数
}
}
}
});
第四步:指定节点选中事件
//选中事件
$('#jstree_list').on('changed.jstree', function (e, data) {
var i, j, r = [];
for (i = 0, j = data.selected.length; i < j; i++) {
//只做单个节点选中
r["text"] = data.instance.get_node(data.selected[i]).text;
r["id"] = data.instance.get_node(data.selected[i]).id;
}
});
以上所有方法需要在页面加载完执行
jstree非常灵活和强大可以指定多种数据源,这里只说明json格式数据源,也是较常用的数据源格式。
第五步:创建jstree数据源
public string GetModuleList()
{
var appModule = _dbs.DataBase.GetCollection<AppModule>("config_app_module");
var appmoduleall = appModule.FindAllAs<AppModule>().ToList();
var rootmodule = appmoduleall.Where(e => e.pid.Equals()).ToList(); StringBuilder strb = new StringBuilder();
strb.Append("[");
//定义递归方法
Func<int, int> GetChildrenModule = null;
GetChildrenModule = id =>
{
var childrenmodules = appmoduleall.Where(e => e.pid.Equals(id)).ToList();
if (childrenmodules.Count() > )
{
strb.AppendFormat(", \"children\":[");
foreach (var cm in childrenmodules)
{
strb.Append("{");
strb.AppendFormat("\"id\":\"{0}\"", cm._id);
strb.AppendFormat(", \"text\":\"{0}\"", cm.amname);
GetChildrenModule(cm._id);
if (childrenmodules.IndexOf(cm) == (childrenmodules.Count - ))
{
strb.Append("}");
}
else
{
strb.Append("},");
}
}
strb.AppendFormat("]");
}
return childrenmodules.Count();
}; //遍历根节点
foreach (var item in rootmodule)
{
strb.Append("{");
strb.AppendFormat("\"id\":\"{0}\"", item._id);
strb.AppendFormat(", \"text\":\"{0}\"", item.amname);
GetChildrenModule(item._id);
if (rootmodule.IndexOf(item) == (rootmodule.Count - ))
{
strb.Append("}");
}
else
{
strb.Append("},");
} }
strb.Append("]");
return strb.ToString();
}
}
第六步:执行效果

还有皮肤,编辑,拓展等扩展属性,有需要可以再研究。
C#应用jstree实现无限级节点的方法的更多相关文章
- 查找html节点的方法
document.firstChild document.documentElement(兼容性较好) 查找body节点的方法 document.firstChild.lastChild docume ...
- OSG中找到特定节点的方法
OSG中找到特定节点的方法 转自:http://38288890.blog.163.com/blog/static/19612845320072721549504/ 为了在OSG中找到需要的节点并对节 ...
- OSG中找到特定节点的方法(转)
OSG中找到特定节点的方法 为了在OSG中找到需要的节点并对节点做出相应的操作,可以从NodeVisitor类中继承一个类,NPS的教程 [download id="14"] 阐述 ...
- 修复jquery.treeview的增加子节点的方法的bug
1.修复理由 在一个android项目中用到了treeview控件(本来自己通过android的原生api实现了一个http://www.cnblogs.com/Mr-Nobody/p/3527688 ...
- jQuery获取父级、兄弟节点的方法
一.jQuery的父节点查找方法 $(selector).parent(selector):获取父节点 $(selector).parentNode:以node[]的形式存放父节点,如果没有父节点,则 ...
- [SQL]T-Sql 递归查询(给定节点查所有父节点、所有子节点的方法)
T-Sql 递归查询(给定节点查所有父节点.所有子节点的方法) -- 查找所有父节点with tab as( select Type_Id,ParentId,Type_Name from Sys_ ...
- [转]Javascript removeChild()删除节点及删除子节点的方法(同样适用于jq)
Javascript removeChild()删除节点及删除子节点的方法 这篇文章主要介绍了Javascript removeChild()删除节点及删除子节点的方法的相关资料,需要的朋友可以参考下 ...
- ThinkPHP自动填充实现无限级分类的方法
这篇文章主要介绍了ThinkPHP自动填充实现无限级分类的方法,是ThinkPHP项目开发中非常实用的一个技巧,需要的朋友可以参考下 本文实例展示了ThinkPHP自动填充实现无限级分类的方法,是 ...
- js项目第一课:获取节点的方法有三个
第一种方法: demo.html代码如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...
随机推荐
- xdoj-1319 求树上任意一点的最大距离----利用树的直径
1 #include <bits/stdc++.h> using namespace std; ; vector < vector <int> > g(N); in ...
- python----函数与函数式编程
一. 函数与函数式编程 1. 面向对象编程 (类)class 2.面向过程编程 (过程) def 3.函数式编程 (函数) def (1) 函数的特点: 代码重用: ...
- JAVA静态代码块的作用
一 般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情 况下,其他程序来调用的时候,需要使用静态方法,这种 ...
- Go Example--结构体
package main import "fmt" //定义一个私有结构体 type person struct { name string age int } func main ...
- Distributed Phoenix Chat with PubSub PG2 adapter
转自:https://www.poeticoding.com/distributed-phoenix-chat-with-pubsub-pg2-adapter/ In this article we’ ...
- gogs wekan 集成试用
wekan 官方提供了一个集成gogs 的扩展,不是完全的自动化,需要结合cli,但是官方的cli 写的...(不是很全) 备注: 测试环境使用docker-compose 环境准备 docker-c ...
- setsockopt调用IP_ADD_MEMBERSHIP出错errno:19 no such device
if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq)) < 0) { pri ...
- Java 11 部分新特性
JEP 320: Remove the Java EE and CORBA Modules(删除 Java EE 和 CORBA 模块) Java EE和CORBA两个模块在JDK9中已经标记&quo ...
- Java之SimpleDateFormat日期格式转换(Date 和 String 类型之间的转换)
SimpleDateFormat : 可以选择任何用户定义的日期-时间格式的模式 "yyyy-MM-dd HH:mm:ss:SSS"1.格式化:Date -->Stri ...
- opengl 几何着色器
绘制4条线段 #define GLEW_STATIC #include <GL/glew.h> #include <GLFW/glfw3.h> #include "S ...