业余时间研究了一下jstree,更新非常快已经是3.0了,首先看一下效果截图:

1.页面引入样式和脚本(注意路径根据实际情况)

<link href="~/Scripts/vakata.JsTree/assets/dist/themes/default/style.min.css" rel="stylesheet" />

<script src="~/Scripts/vakata.JsTree/assets/dist/jstree.js"></script>

2.定义容器

<div id="treeModule" data-id="0">
</div>

3.初始化jstree,这里调用了一个action(NewModuleChild),第4点里说到这个action,先看jstree的使用

  1. $('#treeModule').jstree({
  2. "core": {
  3. "animation": 0,
  4. "check_callback": true,
  5. "themes": {
  6. "stripes": true, 'responsive': false
  7. },
  8. 'data': {
  9. 'url': '@Url.Action("NewModuleChild")',
  10. 'data': function (node) {
  11. return { 'root': node.id === '#' ?"0" :node.id };
  12. },
  13. "type":'POST',
  14. "success": function (d) {
  15.  
  16. }
  17. }
  18. },
  19. "types": {
  20. "#": {
  21. "max_children": 1,
  22. "max_depth": 4,
  23. "valid_children": ["root"]
  24. },
  25. "root": {
  26. "icon": "/scripts/vakata.JsTree/assets/images/tree_icon.png",
  27. "valid_children": ["default"]
  28. },
  29. "default": {
  30. "valid_children": ["default", "file"]
  31. },
  32. "file": {
  33. "icon": "glyphicon glyphicon-file",
  34. "valid_children": []
  35. }
  36. },
  37. "plugins": [
  38. "contextmenu", "dnd", "search","themes",
  39. "state", "types", "wholerow","json_data"
  40. ]
  41. })

4.NewModuleChild的定义

  1. public JsonResult NewModuleChild()
  2. {
  3. var parentId = Request["root"].ConvertTo<int>();
  4. var data = Utility.PermissionSvc.GetChildByParentId(parentId);
  5. var result = from m in data
  6. select new { id = m.Id, text = m.Name, children = !String.IsNullOrWhiteSpace(m.ChildNodes), li_attr = m };
  7. return Json(result);
  8. }

另外还有些添加节点、修改节点直接参考官网的例子就行了,但是有些地方还是需要注意,这里我就列举个调用添加节点的方法

  1. $("#btnaddnode").click(function () {
  2. var position = 'last';
  3. var parent = $("#treeModule").jstree("get_selected");
  4. var newNode = { state: "open", text: "新建的测试", id: 111, data: "新建的测试", li_attr: { id: 111, name: '新建的测试', url: 'http://www.baidu.com', target: '_blank', orderval: 1, childnodes: '2,3', maxleavel: 22, optscope: '2,1,4' } ,type:'default'};
  5. $('#treeModule').jstree('create_node', parent[0], newNode, 'last', function (e, data) {
  6. //alert('hello');
  7. }, true);
  8. });

jstree无限级菜单ajax按需动态加载子节点的更多相关文章

  1. Easyui _treegrid 动态加载子节点

    <table id="dg" class="easyui-treegrid" title="数据字典列表" data-options= ...

  2. jquery easyui tree动态加载子节点

    1.前端tree绑定时,使用onBeforeExpand事件:当节点展开时触发加载子节点,自动会向服务端发送请求:url为绑定url,参数为当前节点id this.tree = { method: ' ...

  3. (转)jQuery EasyUI Tree - TreeGrid动态加载子节点

    有时我们已经得到充分的分层树形网格(TreeGrid)的数据. 我们还想让树形网格(TreeGrid)按层次惰性加载节点. 首先,只加载顶层节点. 然后点击节点的展开图标来加载它的子节点. 本教程展示 ...

  4. 详谈LABJS按需动态加载js文件

    为了提高页面的打开和加载速度,我们经常把JS文件放在页面的尾部,但是有些JS必须放在页面前面,这样就会增加页面的加载时间:于是出现了按需动态加载的概念,这个概念就是当页面需要用到这个JS文件或者CSS ...

  5. 按需动态加载js

    有些时间我们希望能按需动态加载js文件,而不是直接在HTML中写script标签. 以下为示例代码: var js = document.createElement('script'); js.asy ...

  6. AMD和RequireJS初识----优化Web应用前端(按需动态加载JS)

    RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的RequireJS压缩后只有14K,堪称非常轻量.它还同时可以和其他的框架协同工作,使用Re ...

  7. 如何按需动态加载js文件

    JavaScript无非就是script标签引入页面,但当项目越来越大的时候,单页面引入N个js显然不行,合并为单个文件减少了请求数,但请求的文件体积却很大.这时候最好的做法就是按需引入,动态引入组件 ...

  8. Ajax实现页面动态加载,添加数据

    前台代码: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Products ...

  9. jquery easyui tree异步加载子节点

    easyui中的树可以从标记中建立,也可以通过指定一个URL属性读取数据建立.如果想建立一棵异步树,需要为每个节点指定一个id属性值,这样在加载数据时会自动向后台传递id参数. <ul id=& ...

随机推荐

  1. 仅此一文让你明白ASP.NET MVC 之View的显示

    有些人要问题,为什么我要学框架?这里我简单说一下,深入理解一个框架,给你带来最直接的好处: 使用框架时,遇到问题可以快速定位,并知道如何解决: 当框架中有些功能用着不爽时,你可以自由扩展,实现你想要的 ...

  2. noip模拟赛 但有用

    题目描述 给定一个 n ∗ m 个矩阵,矩阵中每个数都是 [1, 12] 内的整数.你可以执行下列两个操作任意多次: • 指定一行,将该行所有数字 +1. • 指定一列,将该列所有数字 +1. 如果执 ...

  3. [解决] Error Code: 1044. Access denied for user 'root'@'%' to database

    今天在测试集群用的mysql上,遇到个权限的问题: SQLException : SQL state: 42000 com.mysql.jdbc.exceptions.jdbc4.MySQLSynta ...

  4. 上下文路径request.getContextPath();与${pageContext.request.contextPath}

    (1) request.getContextPath();与${pageContext.request.contextPath}都是获取上下文路径: 1. request.getContextPath ...

  5. 2015/9/5 Python基础(9):条件和循环

    条件语句Python中的if语句如下: if expression: expr_true_suite 其中expression可以用布尔操作符and, or 和 not实现多重判断条件.如果一个复合语 ...

  6. 图书馆排序(Library Sort)

    思路简介,大概意思是说,排列图书时,如果在每本书之间留一定的空隙,那么在进行插入时就有可能会少移动一些书,说白了就是在插入排序的基础上,给书与书之间留一定的空隙,这个空隙越大,需要移动的书就越少,这是 ...

  7. HDFS fs 基本命令

    https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#Overvie ...

  8. 【BZOJ4816】【SDOI2017】数字表格 [莫比乌斯反演]

    数字表格 Time Limit: 50 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Doris刚刚学习了fibonac ...

  9. 【51NOD-0】1089 最长回文子串 V2(Manacher算法)

    [算法]回文树 #include<cstdio> #include<algorithm> #include<cstring> using namespace std ...

  10. Android通知栏介绍与适配总结

    由于历史原因,Android在发布之初对通知栏Notification的设计相当简单,而如今面对各式各样的通知栏玩法,谷歌也不得不对其进行更新迭代调整,增加新功能的同时,也在不断地改变样式,试图迎合更 ...