打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
JQuery的JSTree(上篇)
    (本来是不想分成上、下两篇来写的,不过sina对博文字数有要求,不小心写超长了,只得拆分。)
   
   这是一个树形菜单的展示。其功能及其强大,几乎可以提供你对树结构的各种要求。下面,对其简述。
    首先,感谢 IvanBozhanov利用JQuery对该组件的开发。同时还要感谢我的技术总监Mr. Lu和网友“漂流瓶”的帮助。
    组件目前更新至v0.9.8 版本,当然,版本还会继续升级,作者试图将它变得更加强大和完美,Ivan Bozhanov在博客中说:“I justthought it would be nice if I posted all my ideas for the upcoming0.9.9 and see which ones you like, or do not like.”
   使用JSTree,需要在文件头写类似如下内容的代码,也就是说,它基于JQuery技术,自然需要jquery.js文件支持,同时还有css.js和tree_component.js这2个文件做支持以及tree_comopnent.css文件的渲染。
<scriptsrc="<%=request.getContextPath()%>/js/jquery-0.9.6.js"type="text/javascript"></script>
<scriptsrc="<%=request.getContextPath()%>/js/css.js"type="text/javascript"></script>
<scripttype="text/javascript"src="<%=request.getContextPath()%>/js/tree_component.js"></script>
<linkrel="stylesheet" href="<%=request.getContextPath()%>/css/tree_component.css"/>
   这个树,我们需要给它提供一个容器,如div。
   容器内不需要给出内容,<divid="divForTree"></div>即可。内容会在JSTree被Init的时候来渲染。

PARTA.

   来看一个普通的树:
    $(function () {
   $.ajaxSetup({cache:false});//这个是为了树的准确性做的一个缓存区清理的工作
   $("#divForTree").tree({//从这里开始初始化JSTree
   data  :{
      type  :"json",//支持如xml等多种类型,这里是获取JSON格式数据源
       url   :src,//每次获得数据从这个链接
       async :true,//动态加载数据
       async_data : function (NODE){//请求数据时带的参数列表,可通过getParameter获得。
                               return { parent_Id : $(NODE).attr("id")|| 0}
                            }
    },
    lang:{
        loading:"目录加载中……" //在用户等待数据渲染的时候给出的提示内容,默认为loading
         },
     ui:{//在这个option中设置context来控制JSTree的右键操作,如果在context的visible函数内始终返回false则表示在任何节点的右键都无效。
         context:{visible :function (NODE, TREE_OBJ) {
                   return false;
               }}
        },
  callback :{//响应函数,如节点被选中的onselect,还有onopen,onload,beforeopen等很多可定义内容。
       onselect: function(node){
         //自定义操作
        
      }
   }
 
});
});
   再看一下JSON的数据吧,可以在后台JAVA程序段获得一个根据实际情况如当前打开节点的ID作为parent_id获取它的子节点List。然后在一个JSP中迭代这个List(这里的迭代利用了Struts2的标签):
<%@ pagecontentType="text/html; charset=utf-8"%>
<%@ taglibprefix="s" uri="/struts-tags" %>
[
<s:iterator value="noteslist" >
{
   attributes: { id : ${id} },
   data: "${name}" ,state: "closed"
}
,
</s:iterator>
]

PARTB.

   现在看一个带有右键操作的树形菜单。
$(document).ready(function(){
   $.ajaxSetup({cache:false});
   $("#browser").tree({
   data  : {
      type  : "json",
      url   : src,
       async :true,
       async_data :function (NODE) {
                               return {parent_Id : $(NODE).attr("id") || 0}
                            }
    },
    lang:{
        loading:"目录加载中……"
         },
    rules:
    {
    draggable   :"all"  //这个设置可以使得节点进行拖动操作
     },
    ui:{
        context    : [ //自定义右键操作的可操作内容
           {
               id     : "create",
               label   : "添加下级目录",//右键弹出菜单的此项操作屏显字样
               visible : function (NODE,TREE_OBJ) { if(NODE.length != 1) return false; returnTREE_OBJ.check("creatable", NODE); }, //允许节点被右击时出现操作菜单
               icon   : "<%=request.getContextPath()%>/css/themes/default/create.png",//右键弹出菜单的此项操作图标
               action  :function (NODE, TREE_OBJ) {
                                               //进行此项操作,将有这个函数事件被响应
                                           }
           },
           "separator"//这个是在两个操作之间画一条分隔线
           ,
           {
               id     : "edit",
               label   :"编辑目录信息",
               visible : function (NODE, TREE_OBJ) { if(NODE.length != 1) returnfalse; return TREE_OBJ.check("creatable", NODE);},
               icon    :"<%=request.getContextPath()%>/image/reg2.gif",
               action  : function (NODE, TREE_OBJ){
                                          openWindow('myurl','','',function(){treeRefresh($(NODE).attr("id"));});
                                       }
           },
           "separator"
           ,
           {
               id     : "privilege",
               label   :"设置目录权限",
               visible : function (NODE, TREE_OBJ) { if(NODE.length != 1) returnfalse; return TREE_OBJ.check("creatable", NODE);},
               icon    :"<%=request.getContextPath()%>/css/themes/default/rename.png",
               action  : function (NODE, TREE_OBJ){
                                          openWindow('myurl','','',function(){treeRefresh($(NODE).attr("id"));});
                                       }
           },
           "separator",
           {
               id     : "delete",
               label   : "删除",
               visible : function (NODE, TREE_OBJ) { if(NODE.length != 1) returnfalse; return TREE_OBJ.check("creatable", NODE);},
               icon    :"<%=request.getContextPath()%>/css/themes/default/remove.png",
               action  : function (NODE, TREE_OBJ){
                                           vartree=$.tree_reference("browser");
                                          openWindow('myurl','','',function(){
                                              //下边的.parent()和.refresh()均为v0.9.8版本提供,如果你使用的是其他版本如v0.9.6等,这些将不被支持。
                                          NODE=$(tree.parent(NODE));
                                          if($(NODE).attr("id")==undefined){
                                             tree.refresh();
                                          }else{
                                             TreeRefresh();
                                          }
                                          });
                                       }
           },
           "separator",
           {
               id     : "others",
               label   :"其他操作",
               visible : function (NODE, TREE_OBJ) { if(NODE.length != 1) returnfalse; return TREE_OBJ.check("creatable", NODE);},
               icon    :"<%=request.getContextPath()%>/css/images/cut.png",
               action  : function (NODE, TREE_OBJ){
                                          alert("暂无可提供操作。");
                                       }
           }
           ]
    },
  callback : {
       onselect: function(node) {
         //(a);
         
      }
   }
 
});
functiontreeRefresh(nodeid){
                  varrid=nodeid;
                vartree=$.tree_reference("browser");
                varpar_node=tree.parent($("#"+rid));
               tree.refresh(par_node);
}
});


                                                  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
jstree教程
jstree简单应用
dTree无限级目录树和JQuery同步ajax请求 - - ITeye技术网站
jsTree获取选中节点和选中指定节点
一个使用Jquery写的一个鼠标拖动效果
jQuery TreeGrid
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服