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 的持久性菜单
随机推荐
- sgu 194 被动散热器具有最大流量的上限和下限(最大流量模板dinic加上优化)
模板类型的题详细參考国家集训队论文:http://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html 參考博客:http://blog.csdn.ne ...
- Unity插件之NGUI学习(6)—— 关于Widget怎样加入触发事件(触发OnClick)
NGUI中,Button本身就带有OnClick事件,可是Sprite,Label等( 也绑有Widget的)并没有触发事件,事实上NGUI的事件触发都必须加入Box Collider,并勾选Is T ...
- 给Notepad++ 加右键菜单带图标
原文:给Notepad++ 加右键菜单带图标 从网上下载下来的Notepad++ http://download.tuxfamily.org/notepadplus/6.3.3/npp.6.3.3. ...
- 解决OUTLOOK 533错误问题
OutLook中“553 sorry, that domain isn‘t in my list of allowed rcpthosts (#5.7.1)”,无法发送邮件错误,解决方法 最近我在给徐 ...
- Lua的多任务机制——协程(coroutine)
并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制.大致上有这么两种多任务技术,一种是抢占式多任务(preemptive multitasking),它让操作系统来决定 ...
- Objective-C的动态特性
最近几年中涌现了大量的Objective-C开发者.有些是从动态语言转过来的,比如Ruby或Python,有些是从强类型语言转过来的,如Java或C#,当然也有直接以Objective-C作为入门语言 ...
- PHP添加Mssql/sqlserver2000扩展,适用于Php5.2/Php5.3/Php5.4
原文:PHP添加Mssql/sqlserver2000扩展,适用于Php5.2/Php5.3/Php5.4 本文介绍如何在Windows下配置php扩展. 本文链接 http://blog.csdn. ...
- AngularJs应用页面
AngularJs应用页面切换优化方案 葡萄城的一款尚在研发中的产品,对外名称暂定为X项目.其中使用了已经上市的wijmo中SpreadJS产品,另外,在研发过程中整理了一些研发总结分享给大家.如 ...
- Chrome控制台 JS调试
Chrome控制台 JS调试的一些小技巧 $ $_命令返回最近一次表达式执行的结果,功能跟按向上的方向键再回车是一样的,但它可以做为一个变量使用在你接下来的表达式中. $0~$4则代表了最近5个你选择 ...
- 关于session_start()这个问题
关于session_start()这个问题,其实网上很多解决的方法,论坛也好多人回答这类的问题, 现在的状况是依然有警告提示Warning: session_start() [function.ses ...