JS树型菜单
本树型菜单主要实现功能有:基本的树型菜单,可勾选进行多选项操作。
本树型菜单适合最初级的学者学习,涉及内容不难,下面看代码。
首先看View的代码,第一个<div>用来定义树显示的位置和id
<div id="PersonTree"></div>
</div>
<div style=" margin-left:230px;" id="result"></div>
<button class="t-button t-state-default" id="PersonSelectSubmit" onclick="displayCheckedPersons ()">选择人员</button>
接下来看JS代码:
$(document).ready(function () {
$("#PersonSequenceSubmit").attr('disabled', true);
});
$("#PersonTree").jstree({
json_data: {
ajax: {
url: '<%= Url.Action("GetPersonTreeDataAll", "Home")%>',
data: '{did:3}',
type: 'POST',
dataType: 'json',
contentType: 'application/json charset=utf-8'
}
}, "themes": { "theme": "default", "dots": true, "icons": true },
"plugins": ["themes", "json_data", "ui", "checkbox"]
});
}); var SelectedPersonNum = ;
var SelectedPersons = new Array(); function displayCheckedPersons() {
var checkedPersons = new Array();
var j;
j = ;
var nodes = $("#PersonTree").jstree("get_checked",null,true); //使用get_checked方法
$.each(nodes, function (i, element) {
if ($(element).attr("ifPerson") == "Y") {
checkedPersons[j] = $(element).attr("id");
j = j + ;
}
}); SelectedPersonNum = checkedPersons.length;
if (checkedPersons.length < ) {
alert('请首先选择要管理的工作人员.');
return;
}
SelectedPersons = checkedPersons;
$.ajax({
type: "POST",
url: '<%= Url.Action("DisplayCheckedPersons", "Home") %>',
data: { checkedRecords: checkedPersons },
dataType: "html",
success: function (request) {
$("#result").html(request);
},
traditional: true
});
return;
}
上半部分,是用于显示树的,下面的function是用于勾选目标项目进行操作的。这里使用的是ajax形式,不太了解的朋友可以搜搜资料了解下,还是蛮好掌握的。
接下来看后台控制器代码:
[HttpPost]
public JsonResult GetPersonTreeDataAll(string did)//没用到地点值,显示全部人员,只是保留
{ string classnum = (HttpContext.User.Identity.Name.Split(',')[]).Substring(, );
jstreeDataContext db = new jstreeDataContext();
var d = db.ClassInfo.FirstOrDefault(c => c.classnum == classnum);
if (d != null)
{
JsTreeModel rootNode = new JsTreeModel();
rootNode.attr = new JsTreeAttribute();
rootNode.data = d.classname;
rootNode.attr.id = d.classnum;
rootNode.state = "open"; //根节点设定为初始打开状态
new JsTreeRepository().PopulateTree(classnum, rootNode);
return Json(rootNode);
}
else
{
return null;
}
}
这是用于根节点的选取,由第五行获得登录用户的身份并获取该类用户可选操作的根节点,
public void PopulateTree(string dhid, JsTreeModel node)
{
jstreeDataContext db = new jstreeDataContext();
if (node.children == null)
{
node.children = new List<JsTreeModel>();
} var dp = db.ClassInfo.Where(c => c.classnum == dhid).FirstOrDefault();
var dpid = dp == null ? : dp.id;
var hid = dp.id;
foreach (var d in db.ClassInfo.Where(c => c.classnum.Substring(, dhid.Length) == dhid & c.classnum.Length == dhid.Length + ).ToList())
{
// create a new node
JsTreeModel t = new JsTreeModel();
t.attr = new JsTreeAttribute();
t.attr.id = d.classnum;
t.data = d.classname;
// populate the new node recursively
PopulateTree(d.classnum, t);
node.children.Add(t); // add the node to the "master" node
}
//lastly, loop through each file in the directory, and add these as nodes
foreach (var p in db.UsersInfo.Where(e => e.classID == hid).OrderBy(e => e.username).ToList())
{
// create a new node
JsTreeModel t = new JsTreeModel();
t.attr = new JsTreeAttribute();
t.attr.id = p.usernum;
t.attr.ifPerson = "Y"; //表明是人员节点
t.data = p.username;
t.state = "close";
t.children = null;
// add it to the "master"
node.children.Add(t);
}
}
这里,有2个遍历,第一个用于遍历之前传过来的根节点下的所有节点,第二个用于遍历每个节点的叶子。
这里的Model需要注意的一点事:
public class JsTreeModel
{
public string data;
public JsTreeAttribute attr;
public string state ;
public List<JsTreeModel> children;
} public class JsTreeAttribute
{
public string id;
public string ifPerson = "N"; //初始化都标识不是人员节点
} public class JsTreeLeafModel
{
public string data;
public JsTreeAttribute attr;
}
这是树型菜单需要的一个Model。
好了,剩下的就是数据库和数据元素的Model的建立了,这里就不做多演示了,相信不会难。希望能帮到大家,有不足的望指出。
JS树型菜单的更多相关文章
- 下拉的DIV+CSS+JS二级树型菜单
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- oracle使用connect by进行级联查询 树型菜单
Oracle使用connect by进行级联查询 树型菜单(转) connect by可以用于级联查询,常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点. 来看一个示例,现假设我们拥 ...
- js, 树状菜单隐藏显示
js写的不是很严谨~~~嘿嘿 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- php实现无限级树型菜单(函数递归算法)
首先到数据库取数据,放到一个数组,然后把数据转化为一个树型状的数组,最后把这个树型状的数组转为html代码.也可以将第二步和第三步合为一步. 详细如下:1.数据库设计:脚本如下:CREATE TABL ...
- php通用的树型类创建无限级树型菜单
生成树型结构所需要的2维数组,var $arr = array()数组格式如下: array( 1 => array('id'=>'1','parentID'=>0,'name'=& ...
- JavaScript:使用递归构建树型菜单
使用递归函数将扁平数据转为树型结构,并渲染到页面 效果图: 代码: <!DOCTYPE html> <html lang="en"> <head> ...
- 强大的Js树型控件Dtree使用详解
http://www.lmwlove.com/ac/ID868 在学习文章之前,要学会看官方网站http://destroydrop.com/javascripts/tree.从官方页面你能知道:dt ...
- Js树型控件Dtree使用
dtree地址:http://destroydrop.com/javascripts/tree/ Key features Unlimited number of levels 无限级 Can be ...
- jQuery 树型菜单插件(Treeview)
jQuery Treeview 提供了一个无序灵活的可折叠的树形菜单.试用于一些菜单的导航,支持基于 cookie 的持久性菜单
随机推荐
- 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划
今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...
- java_log4j 经典配置
程序加载制定日志文件 public static final String log4j = "log4j.xml"; /** * @declare 加载log4j * @throw ...
- WebBrowser控件使用详解
原文:WebBrowser控件使用详解 方法 说明 GoBack 相当于IE的“后退”按钮,使你在当前历史列表中后退一项 GoForward 相当于IE的“前进”按钮,使你在当前历史列表中前进一项 G ...
- wget一个小技巧
今天在装一个东西的时候,在网上看到了这样的命令 wget http://xxxx.sh -o - | sh 的用法 不太明白-o -的用法于是乎man wget,看到了下面的一段话 -O fil ...
- JavaScript Date对象介绍
原文:JavaScript Date对象介绍 Date 日期和时间对象 1. 介绍 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 2. 构造函数 2.1 new ...
- IOS程序启动的过程
IOS程序启动按照以下5个步骤执行 1.main函数 IOS程序启动首先执行main函数 2.UIApplicationMain 执行main函数中的UIApplicationMain函数,这个函数会 ...
- [Unity3D]Unity3D连衣裙实现游戏开发系统
大家好,我是秦培.欢迎关注我的博客,我的博客地址">blog.csdn.net/qinyuanpei. 不知从什么时候開始,国产RPG单机游戏開始出现换装,仙剑系列中第一部实现了换装的 ...
- POI导出大量数据的简单解决方案(附源码)-Java-POI导出大量数据,导出Excel文件,压缩ZIP(转载自iteye.com)
说明:我的电脑 2.0CPU 2G内存 能够十秒钟导出 20W 条数据 ,12.8M的excel内容压缩后2.68M 我们知道在POI导出Excel时,数据量大了,很容易导致内存溢出.由于Excel ...
- C程序中引用自定义的C函数模块
原文:C程序中引用自定义的C函数模块 我们知道,刚开始接触C语言编程,一般都是在一个.c或者.cpp(以下只说.c)的文件中编写代码,其中一定会有一个入口函数, 也就是main()函数,你可以将程序代 ...
- 【iOS】Xib的使用与File'Owner总结
一.XIB的适用范围 xib(也叫Nib)与storyboard一样是用来描写叙述界面的. storyboard描写叙述的是比較大型的,大范围.适合描写叙述界面跳转等. 二.XIB的使用 Xib是小范 ...