用dTree组件生成无限级导航树
首先是下载dTree组件,本文附件中提供完整的示例,直接使用即可。下面我们先来看看dTree组件的结构:
这很简单,由一个JS文件,一个样式表文件和提供的基本图标构成,总体20几K,非常小,不占用网络流量。制作dTree的导航树时,也是一个HTML页面,那么我们就要在页面引入相关资源:
- <head>
- <title>导航树</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf8" />
- <style type="text/css">@import url('components/dtree/dtree.css');</style>
- <script type="text/javascript">var dtreeIconBasePath = "components/dtree";</script>
- <script language="javascript" src="components/dtree/dtree.js"></script>
- </head>
下面就是导航树内容的编写了,做一个很简单很强大的示例:
- <script type="text/javascript">
- var treeMenu = [
- { level:1, name:"用户管理"},
- { level:2, name:"用户列表", ico:"images/tico_way.gif",link:"user_list.html"},
- { level:2, name:"角色管理"},
- { level:3, name:"角色列表", ico:"images/tico_way.gif",link:"role_list.html"},
- { level:3, name:"用户角色", ico:"images/tico_way.gif",link:"ur_list.html"},
- { level:1, name:"信息管理"},
- { level:2, name:"新闻管理", ico:"images/tico_way.gif",link:"news_list.html"},
- { level:2, name:"公告管理", ico:"images/tico_way.gif",link:"bulletin_list.html"},
- { level:1, name:"系统邮件", ico:"images/tico_way.gif"},
- { level:1, name:"网络文件", ico:"images/tico_way.gif",link:"disk_list.html"}
- ];
- </script>
可以看出level是当前项目的层级,name就是显示的名称,ico是指定的图标,不指定时系统使用默认图标,link就是点击时进入的地址。当然非叶子节点元素一般是不需要地址的,那么不写就可以了,而叶子节点不写的话该行就是不可点击进入的效果。这是一个混合了1,2,3层的导航树。有了这些还不够,它们不能被解析,下面来看看解析的JS。
- <script type="text/javascript">
- //建立新树
- tree = new dTree('tree');
- tree.config.target = "MainFrame";
- tree.config.useCookies = false;
- var selNum = -1;
- var link = "";
- //根目录
- tree.add(0,-1,'系统管理中心', null, null, null, '', '');
- var count = 0;
- var pLevelIdArray = new Array();
- pLevelIdArray[1] = 0;
- var currLevel = 1;
- for (var i=0; i<treeMenu.length; i++) {
- var item = treeMenu[i];
- var itemLevel = item.level;
- pLevelIdArray[itemLevel+1] = ++count;
- if (item.link!=null && item.link!="") {
- if (item.ico!=null) {
- tree.add(count, pLevelIdArray[itemLevel], item.name, item.link, null, null, item.ico, item.ico);
- } else {
- tree.add(count, pLevelIdArray[itemLevel], item.name, item.link);
- }
- } else {
- if (item.ico!=null) {
- tree.add(count, pLevelIdArray[itemLevel], item.name, null, null, null, item.ico, item.ico);
- } else {
- tree.add(count, pLevelIdArray[itemLevel], item.name);
- }
- }
- if (item.select) {
- selNum = count;
- link = item.link;
- }
- }
- document.write(tree);
- tree.openAll();
- if (selNum != -1) {
- tree.openTo(selNum,true);
- top.document.frames["MainFrame"].location.href=link;
- }
- </script>
这样就可以了,主要是这里用了frame,页面的显示会在MainFrrame中显示,这是一般管理系统的结构,左侧导航树,右侧主显示区域,上侧是登录信息和模块切换,下侧就是版权声明了。
这样就能正常显示一棵树了,但是有时我们需要折叠和展开导航树,这个也很简单,如下即可:
- <div style="display:block;margin-bottom:5px;">
- 菜单控制:
- 【<a href="#" onclick="tree.openAll();this.blur();return false;" style="color:#333333">展开</a>】
- 【<a href="#" onclick="tree.closeAll();this.blur();return false;" style="color:#333333">折叠</a>】
- </div>
这样就完整了,我们来看看实际的效果吧:
折叠后的效果就是:
实际中,页面代码不需要每个页面都完整写出,我们可以抽取成宏,直接调用宏即可,下面结合FreeMarker来优化一下编码结构,实际生成的效果都是一样的。
- <#-- 树形控件 tree -->
- <#macro tree root="" display="">
- <style type="text/css">@import url('components/dtree/dtree.css');</style>
- <script type="text/javascript">var dtreeIconBasePath = "components/dtree";</script>
- <script language="javascript" src="${base}/components/dtree/dtree.js"></script>
- <#nested>
- <div style="display:${display};margin-bottom:5px;">菜单控制:【<a href="javascript:void(0)" onclick="tree.openAll();this.blur();return false;" style="color:#333333">展开</a>】【<a href="javascript:void(0)" onclick="tree.closeAll();this.blur();return false;" style="color:#333333">折叠</a>】</div>
- <div class="dtree">
- <script type="text/javascript">
- //建立新树
- tree = new dTree('tree');
- tree.config.target = "MainFrame";
- tree.config.useCookies = false;
- var selNum = -1;
- var link = "";
- //根目录
- tree.add(0,-1,'${root}', null, null, null, '${base}/images/tico_root.gif', '${base}/images/tico_root.gif');
- var count = 0;
- var pLevelIdArray = new Array();
- pLevelIdArray[1] = 0;
- var currLevel = 1;
- for (var i=0; i<treeMenu.length; i++) {
- var item = treeMenu[i];
- var itemitemLevel = item.level;
- pLevelIdArray[itemLevel+1] = ++count;
- if (item.link!=null && item.link!="") {
- if (item.ico!=null) {
- tree.add(count, pLevelIdArray[itemLevel], item.name, item.link, null, null, item.ico, item.ico);
- } else {
- tree.add(count, pLevelIdArray[itemLevel], item.name, item.link);
- }
- } else {
- if (item.ico!=null) {
- tree.add(count, pLevelIdArray[itemLevel], item.name, null, null, null, item.ico, item.ico);
- } else {
- tree.add(count, pLevelIdArray[itemLevel], item.name);
- }
- }
- if (item.select) {
- selNum = count;
- link = item.link;
- }
- }
- document.write(tree);
- tree.openAll();
- if (selNum != -1) {
- tree.openTo(selNum,true);
- top.document.frames["MainFrame"].location.href=link;
- }
- </script>
- </div>
- </#macro>
这是FreeMarker的宏定义。那么在页面如何使用呢,很简单:
- <@p.tree root="管理中心" display="block">
- <script type="text/javascript">
- var treeMenu = [
- { level:1, name:"用户管理"},
- { level:2, name:"用户列表", ico:"images/tico_way.gif",
- link:"user_list.html"},
- { level:2, name:"角色管理"},
- { level:3, name:"角色列表", ico:"images/tico_way.gif",
- link:"role_list.html"},
- { level:3, name:"用户角色", ico:"images/tico_way.gif",
- link:"ur_list.html"},
- { level:1, name:"信息管理"},
- { level:2, name:"新闻管理", ico:"images/tico_way.gif",
- link:"news_list.html"},
- { level:2, name:"公告管理", ico:"images/tico_way.gif",
- link:"bulletin_list.html"},
- { level:1, name:"系统邮件", ico:"images/tico_way.gif"},
- { level:1, name:"网络文件", ico:"images/tico_way.gif",
- link:"disk_list.html"}
- ];
- </script>
- </@p.tree>
后续我们会结合RBAC模型来介绍一下简单动态权限树的生成。一家之言,仅供参考,希望对使用者有用。
- dTreeDemo.rar (13.5 KB)
- 下载次数: 299
用dTree组件生成无限级导航树的更多相关文章
- JavaScript导航树
JS导航树 整理之前的小代码片段,放到博客,便于以后完善查看: 该JS导航树实际效果,[GSP+社区网站专题课程页面导航树]地址:http://gsp.inspur.com/knowledge/zhu ...
- Vue视图渲染原理解析,从构建VNode到生成真实节点树
前言 在 Vue 核心中除了响应式原理外,视图渲染也是重中之重.我们都知道每次更新数据,都会走视图渲染的逻辑,而这当中牵扯的逻辑也是十分繁琐. 本文主要解析的是初始化视图渲染流程,你将会了解到从挂载组 ...
- SAP CRM 将组件整合至导航栏中
到现在,我们已经可以让组件独立地显示.我们只是运行它.让它显示在Web UI中.让我们把组件整合进导航栏,使我们可以在正常登录Web UI时访问它. 步骤一: 为你的UI组件主窗体创建一个内向插件. ...
- [WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析
[WebKit内核] JavaScript引擎深度解析--基础篇(一)字节码生成及语法树的构建详情分析 标签: webkit内核JavaScriptCore 2015-03-26 23:26 2285 ...
- 使用Python从Markdown文档中自动生成标题导航
概述 知识与思路 代码实现 概述 Markdown 很适合于技术写作,因为技术写作并不需要花哨的排版和内容, 只要内容生动而严谨,文笔朴实而优美. 为了编写对读者更友好的文章,有必要生成文章的标题导航 ...
- 隐藏左侧快速导航除DMS导航树之外的其他区域
<style type="text/css"> /*隐藏左侧快速导航除DMS导航树之外的其他区域*/ .ms-quicklaunchouter { display: n ...
- JXL组件生成报告错误(两)
JXL组件生成报告 1.详细报错例如以下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -non ...
- Bootstrap入门(十三)组件7:导航条
Bootstrap入门(十三)组件7:导航条 1.默认样式的导航条 2.嵌入表单和按钮 3.嵌入文本和非导航的链接 4.组件排列和下拉菜单 5.固定在顶部/底部 6.反色的导航条 7.路径导航 首先先 ...
- Bootstrap入门(十二)组件6:导航标签页
Bootstrap入门(十二)组件6:导航标签页 1.标签页 2.胶囊式标签页 3.垂直展示 4.两端对齐的标签页 5.禁用的链接 6.添加下拉菜单 先引入本地的CSS文件和JS文件(注:1. ...
随机推荐
- (转)iOS7界面设计规范(5) - UI基础 - 导航
通过分页控件(page control)来暗示多个条目或内容视图的存在.该控件可以有效的向用户展示内容单元的数量,以及当前所见的这一条在队列中的位置.请参考分页控件一节,了解更多详情. 注意:虽然工具 ...
- VMware vSphere 5.5的12个更新亮点(2)
ACPI支持 以前版本的VMware虚拟机的局限性之一,是支持的虚拟设备数量甚少.vSphere 5.5引入了Virtual Hardware 10,这增加了基于SATA的虚拟设备节点,通过AHCI( ...
- Qt 图形特效(Graphics Effect)介绍
原文链接:Qt 图形特效(Graphics Effect)介绍 QGraphicsEffect也是Qt-4.6引入的一个新功能.它让给图形元素QGraphicsItem增加更佳视觉效果的编程变得非常简 ...
- ARM指令集——数据处理指令
ARM汇编指令集 ARM汇编文件的组成 指令:编译完成后作为一条指令(机器码)存储在内存单元中,CPU执行时能够完成处理的操作 伪指令:在编译时替换成能被识别的ARM指令 伪操作:知道编译器进行编译, ...
- 多路复用I/O poll()
1.基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制.poll和selec ...
- 页面全部加载完毕和页面dom树加载完毕
dom树加载完毕 $(document).ready()//原生写法document.ready = function (callback) { ///兼容FF,Google ...
- C#编写Windows服务程序图文教程(转载)
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- (转)HTTP 无法注册 URL http://+:9999/CalculatorService/。进程不具有此命名空间的访问权限
写WCF时在 1 host.Open(); 报错:HTTP 无法注册 URL http://+:9999/CalculatorService/.进程不具有此命名空间的访问权限(有关详细信息,请参见 h ...
- Oracle游标cursor2显示的游标等
--在一中我们介绍了实现过程 select *from stud; declare cursor mycur is select id,name from stud;--1声明 v_id intege ...
- 控制用户的访问之权限、角色【weber出品必属精品】
权限的作用 限制用户对数据的访问 权限的分类 1. 系统权限:能够存取数据库的权限 2. 对象权限:操作数据库对象的内容 系统权限 1.1 如何创建用户: SQL> create user t ...