在开发项目中需要用到树插件,近期研究了几款树插件,好记性不如烂笔头 ,写下来  以后好查

MzTreeView(梅花雪) 很经典的树形菜单脚本控件 菜单树展示加载速度快 支持1w条以上大数据

缺点--不能动态修改 刷新 兼容性不好  官网没有再继续维护

 

最近因开发需求在寻找开源树形插件 研究了一下ztree --jQuery 树插件,很不错的一款树形插件 关键是兼容性比较好

网址:http://www.ztree.me/v3/main.php#_zTreeInfo

  • zTree v3.0 将核心代码按照功能进行了分割,不需要的代码可以不用加载
  • 采用了 延迟加载 技术,上万节点轻松加载,即使在 IE6 下也能基本做到秒杀
  • 兼容 IE、FireFox、Chrome、Opera、Safari 等浏览器
  • 支持 JSON 数据
  • 支持静态 和 Ajax 异步加载节点数据
  • 支持任意更换皮肤 / 自定义图标(依靠css)
  • 支持极其灵活的 checkbox 或 radio 选择功能
  • 提供多种事件响应回调
  • 灵活的编辑(增/删/改/查)功能,可随意拖拽节点,还可以多节点拖拽哟
  • 在一个页面内可同时生成多个 Tree 实例
  • 简单的参数配置实现 灵活多变的功能

后续继续更新自己研究的内容

 由于官网的Demo 异步都是用php代码编写,于是自己动手了写了几个简单的Demo

1、只作树的展示(异步)使用的是简单树

脚本:需要引用JQuery、jquery.ztree.core-3.5.js 类库

 1  function setting() {
 2             var setting = {
 3                 data: {
 4                     view: {
 5                         dblClickExpand: false
 6                     },
 7                     simpleData: {
 8                         enable: true
 9                     }
10                 },
11                 async: {
12                     enable: true,
13                     url: "GetTreeData.aspx",
14                     autoParam: ["id", "name", "level"],
15                     otherParam: { "otherParam": "zTreeAsyncTest", "Method": "GetTreeData", "casetype": $("input:radio:checked").val() },
16                     dataFilter: filter
17                 },
18                 callback: {
19                     beforeClick: beforeClick
20 
21                 }
22             };
23             return setting;
24         }
25 
26 
27         function filter(treeId, parentNode, childNodes) {
28             if (!childNodes) return null;
29             for (var i = 0, l = childNodes.length; i < l; i++) {
30                 childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
31             }
32             return childNodes;
33         }
34 
35         //单击进行刷新
36         function beforeClick(treeId, treeNode) {
37             var check = (treeNode && !treeNode.isParent);
38             //如果是父节点单击打开子节点
39 
40             if (!check) {
41                 var zTree = $.fn.zTree.getZTreeObj("tree");
42                 //只展开本节点的第一级子节点
43                 zTree.expandNode(treeNode, true, false, true);
44 
45                 //可通过单击进行刷新和展开
46                 //                if (treeNode.zAsync) {
47                 //                   //已经异步加载过的强制重新加载(刷新)
48                 //                    zTree.reAsyncChildNodes(treeNode, "refresh", null);
49                 //                }
50                 //                else {
51                 //单击展开
52                 //                     zTree.expandNode(treeNode, true, true, true);
53                 //                }
54             }
55             return true;
56         }
57 
58         $(document).ready(function () {
59             $.fn.zTree.init($("#tree"), setting());
60 
61             $("input:radio").change(function () {
62                 $.fn.zTree.init($("#tree"), setting());
63             });
64 
65             //刷新
66             $("#btnrefresh").click(function () {
67                 var zTree = $.fn.zTree.getZTreeObj("tree");
68                 var selectednotes = zTree.getSelectedNodes();
69                 //获取的是集合
70                 //必须通过循环进行加载获取选中的子节点
71                 for (var i = 0, l = selectednotes.length; i < l; i++) {
72                     //                    alert(selectednotes[i].name);
73                     zTree.reAsyncChildNodes(selectednotes[i], "refresh", null);
74                 }
75 
76             });
77 
78         });

前台页面:

做一个可以切换的树

<input type="radio" value="USECASE" name="ustype" id="usecase" checked="checked" />用例
    <input type="radio" value="CR" name="ustype" id="CR" />CR &nbsp;&nbsp;
    <img src="../../../Images/reload.png" id="btnrefresh" style="cursor: pointer" />
    <fieldset style="overflow: auto" style="height: 500px">
        <div class="zTreeDemoBackground left">
            <ul id="tree" class="ztree">
            </ul>
        </div>
    </fieldset>

 后台请求数据页面处理:

GetTreeData.aspx

//根据请求的数据拼接代码生成Json对象

 1  protected void Page_Load(object sender, EventArgs e)
 2     {
 3         if (!LTMS.BLL.PRM.UserInfo.CheckUserLogin(Page, out _LoginUser)) { return; }
 4 
 5         if (Request.Params["id"] != null)
 6         {
 7             ID = Request.Params["id"].ToString();
 8         }
 9         else
10         {
11             ID = "0";
12         }
13 
14 
15         if (Request.Params["level"] != null)
16         {
17             Level = Request.Params["level"].ToString();
18         }
19         else
20         {
21             Level = "-1";
22         }
23 
24         if (Request.Params["Method"] != null)
25         {
26             Method = Request.Params["Method"].ToString();
27         }
28 
29         if (Request.Params["casetype"] != null)
30         {
31             CaseType = Request.Params["casetype"].ToString();
32         }
33 
34         //映射
35         Type type = this.GetType();
36         MethodInfo method = type.GetMethod(Method);
37         if (method != null)
38         {
39             method.Invoke(this, null);
40         }
41     }
42 
43 
44   /// <summary>
45     /// 获取用例库
46     /// </summary>
47     /// <returns></returns>
48     public void GetTreeData()
49     {
50         IList<SWT_UseCase_Module_Model> _infos;
51         StringBuilder jsonstr = new StringBuilder();
52 
53         if (Level == "-1")
54         {
55             //用例库顶级大节点,需要经权限筛选
56             _infos = UseCaseModule.GetListArray("UseCase", 1, _LoginUser, CaseType, "");
57             //_infos = UseCaseModule.GetListArray("UseCase", _LoginUser);
58         }
59         else
60         {
61             //非用例库顶级大节点,无需权限筛选
62             //_infos = UseCaseModule.GetTreeData(Convert.ToInt64(ID));
63             _infos = UseCaseModule.GetListArray(new string[] { "MODULE_FATHERID=" + ID });
64         }
65 
66         ///创建资讯树
67         string url = "ModuleContent.aspx?id=";
68 
69         foreach (SWT_UseCase_Module_Model _mode in _infos)
70         {
71             //换行需要json转义
72             jsonstr.AppendFormat("{{\"id\":{0},\"name\":\"{1}\",\"pId\":{2},\"url\":\"{3}\",\"target\":\"{4}\"", _mode.Module_ID, _mode.Module_Name.Replace("\n", " ").Replace("\r", " "), _mode.Module_FatherID, url + _mode.Module_ID + "&Type="+CaseType, "mid_frame");
73             if (UseCaseModule.ExistsBywhere("MODULE_FATHERID=" + _mode.Module_ID))
74             {
75                 jsonstr.Append(",isParent:true");
76             }
77             jsonstr.Append("},"); 
78         }
79 
80         //移除最后一个,
81         if (jsonstr.ToString().EndsWith(","))
82         {
83             jsonstr = jsonstr.Remove(jsonstr.Length-1, 1);
84         }
85        
86         _infos = null;
87         Response.Write("["+jsonstr.ToString()+"]");
88 
89     }
View Code

相关文章: