dTree组件的学习

dTree是一个免费的JS树形菜单,使用简单,界面制作的也很专业。

dtree树形菜单

不同的项目需求,造成菜单树的各种变化,因此在介绍dTree的同时,本文着重讲述如何改造dTree,以达到为不同项目所用的目的。

dTree 分析

dTree的使用非常简单,在下载的dTree压缩文件中(2.05),要用的只有三个:

1. dtree.js : dtree功能脚本
2. dtree.css : 样式文件
3. img文件夹 : 存放dtree使用的图标,参看下图:

dtree图标

很容易就可以编写出类似上面的dtree菜单树,源代码如下:

<html>
<head>
<link rel="StyleSheet" href="dtree.css" type="text/css" />
<script type="text/JavaScript" src="dtree.js"></script>
</head>
<body>
<script type="text/javascript" >
<!–
d = new dTree( ‘d’ ) ; //创建树,名称为’d'(注意和树的对象变量名称要一致) 
d.add ( 0 ,-1 ,‘My example tree’ ) ; //在树中增加节点。节点id是0,父节点是-1(根节点),节点文字’My example tree’ 
d.add ( 1 ,0 ,‘Node 1′ ,‘default.html’ ) ; //根节点的子节点(父节点是0),’default.html’表示节点链接(鼠标点击页面跳转url) 
d.add ( 2 ,0 ,‘Node 2′ ,‘default.html’ ) ;
d.add ( 3 ,1 ,‘Node 1.1′ ,‘default.html’ ) ;
d.add ( 4 ,0 ,‘Node 3′ ,‘default.html’ ) ;
d.add ( 5 ,3 ,‘Node 1.1.1′ ,‘default.html’ ) ;
d.add ( 6 ,5 ,‘Node 1.1.1.1′ ,‘default.html’ ) ;
d.add ( 7 ,0 ,‘Node 4′ ,‘default.html’ ) ;
d.add ( 8 ,1 ,‘Node 1.2′ ,‘default.html’ ) ;
d.add ( 9 ,0 ,‘My Pictures’ ,‘default.html’ ,‘Pictures I\’ ve taken over the years’ ,” ,” ,‘img/imgfolder.gif’ ) ; //’Pictures I\’ve taken over the years’是链接title,指定图标 
d.add ( 10 ,9 ,‘The trip to Iceland’ ,‘default.html’ ,‘Pictures of Gullfoss and Geysir’ ) ;
d.add ( 11 ,9 ,‘Mom\’ s birthday’ ,‘default.html’ ) ;
d.add ( 12 ,0 ,‘Recycle Bin’ ,‘default.html’ ,” ,” ,‘img/trash.gif’ ) ;
document.write ( d) ; //输出dtree的html(显示) 
//–> 
</script>
</body>
</html>

分析dtree.js,在dTree中只有两个结构:”节点”和”树”,dTree的所有功能和构造都在于这两个结构的属性和行为中,Node比较简单,只包含节点的基本属性和一个构造方法,所以对dTree的分析和研究的重点可放在dTree结构中。

Attributes(属性) 

id : int 每个节点都有唯一ID,增加节点时需要手工定义一个ID。 
pid : int 父节点ID,根节点的父节点是-1。 
name : String 节点名称(显示名字) 
url : String 节点URL(鼠标点击跳转地址) 
title : String 鼠标移动到节点上显示的文字 
target : String 页面跳转所在的frame 
icon : String 节点关闭时显示的图标地址 
iconOpen : String 节点打开时显示的图标地址 
_io : boolean 节点是否已打开,默认值false。 
_is : boolean 节点是否被选中,默认值false。 
_ls : boolean 是否是最后一个节点,默认值false。 
_hc : boolean 是否有子节点,默认值false。 
_ai : int 在树的节点数组中的下标(位置),默认值0。 
_p : Node 父节点对象,默认值null。 

Operations(行为) 
Node(id, pid, name, url, title, target, icon, iconOpen, open) : void 构造方法,创建一个节点对象。open对应_io,表示节点是否已经打开。 

节点类图

dTree 
Attributes(属性) 
obj : String 树的名称,在创建树时定义。 
aNodes : Node[] 树中的节点数组。 
aIndent : [] 数组。 
root : Node 根节点。 
selectedNode : Node 当前选择的节点。 
selectedFound : boolean 是否有选中节点,默认false。 
completed : boolean 树构建html是否已完成完成,默认false。 
config : Hash数组 树的配置 
target: 设置所有节点的target,默认null 
folderLinks: 目录节点是否可以有链接,默认true 
useSelection: 节点是否可以被选择(高亮),默认true 
useCookies: 设置使用cookies保存树的状态,默认true 
useLines: 是否显示路径点线,默认true 
useIcons: 是否显示图标,默认true 
useStatusText: 是否在状态栏输出节点文字(替换原来的url显示),默认false 
closeSameLevel: 是否自动关闭兄弟节点(当打开本节点时),注意设置true时,openAll()和closeAll()不能工作,默认false 
inOrder: 如果父节点总是在子节点之前加入树,设置true有更好的效率,默认false 
icon : Hash数组 图标 
root: 根,默认'img/base.gif' 
folder: 关闭的文件夹,默认'img/folder.gif' 
folderOpen: 打开的文件夹,默认'img/folderOpen.gif' 
node: 文件,默认'img/page.gif' 
empty: 空,默认'img/empty.gif' 
line: 竖线,默认'img/line.gif' 
join: 丁线,默认'img/join.gif' 
joinBottom: 直角线,默认'img/joinbottom.gif' 
plus: 加号丁线,默认'img/plus.gif' 
plusBottom: 加号直角线,默认'img/plusbottom.gif' 
minus: 减号丁线,默认'img/minus.gif' 
minusBottom: 减号直角线,默认'img/minusbottom.gif' 
nlPlus: 无线加号,默认'img/nolines_plus.gif' 
nlMinus: 无线减号,默认'img/nolines_minus.gif' 

Operations(行为) 

dTree(objName) : void 构造方法,创建树对象。objName: 树名称。 
add(id, pid, name, url, title, target, icon, iconOpen, open) : void 在树中增加一个节点,节点对象添置到aNodes数组末尾。参数open表示节点是否已经打开。 
openAll() : void 打开树中所有节点。此方法由oAll方法实现。 
closeAll() : void 关闭树中所有节点。此方法由oAll()方法实现。 
toString() : String 构建树的html。此方法主要由addNode()方法实现。返回:html。 
addNode(pNode) : String 构建pNode的所有子节点的html。参数pNode: 父节点对象。返回:html。 
node(node, nodeId) : String 构建node的html。参数node: 节点对象;nodeId: 节点在节点数组aNodes中的位置。返回:html。 
indent(node, nodeId) : String 构建node前面的空格、点线、加减号的html。参数node: 节点对象;nodeId: 节点在节点数组aNodes中的位置。返回:html。 
setCS(node) : void 检查并设置:1. node节点是否有子节点; 2. node节点是否是节点数组aNodes中的最后一个。参数node: 节点对象。 
getSelected() : int 从cookies中获取已选中的节点,返回:节点id或null(没有选中任何节点)。 
s(id) : void 鼠标点击节点发生的动作,高亮选择的节点,并记录在cookies中。参数id: 节点在节点数组aNodes中的位置 
o(id) : void 鼠标点击+-图标发生的动作,打开或关闭指定节点,并记录在cookies中。参数id: 节点在节点数组aNodes中的位置 
oAll(status) : void 打开或关闭所有节点,并将状态记录在cookies中。参数status:true打开 fasle关闭 
openTo(nId, bSelect, bFirst) : void 打开指定节点,并将状态记录在cookies中。参数nId:节点ID或节点在节点数组aNodes中的位置;bSelect:true-打开同时被选中,false-打开不被选中;bFirst:true-nId是在节点数组aNodes中的位置,false-nId是节点ID。 
closeLevel(node) : void 关闭和node同级别以及他们的下级的所有节点。参数node:节点对象。 
closeAllChildren(node) : void 关闭node的所有子节点。参数node:节点对象。 
nodeStatus(status, id, bottom) : void 改变节点的状态(关闭 或 打开)。参数status: 要设置的状态(true:打开 false:关闭);id: 节点ID;bottom: true-是最后一个节点。 
clearCookie() : void 清除cookies。 
setCookie(cookieName, cookieValue, expires, path, domain, secure) : void 记录入cookies。 
getCookie(cookieName) : String 从cookies中读取。 
updateCookie() : void 将所有打开的节点ID记录在cookies中。 
isOpen(id) : boolean 根据cookies的记录,判断一个节点是已经打开。参数id:节点id 

时间: 2024-10-05 19:44:33

dTree组件的学习的相关文章

flash中starling组件Feathers学习笔记

  最近在学习starling,然后觉得不可能都自己去写组件,听说有现在的支持starling的Feathers组件,就拿来研究了一下 这个好像是新出,没什么学习资料,都是英文的.部分笔记如下: 1.popups包下有三个类一个接口,对来实现弹出层 2.CalloutPopUpContentManager 比较简单,open方法里直接使用Callout.show(content, source)进行弹出 3.Callout控件功能类似于tip.它能弹出一个带箭头的指向指定displayobjec

开源组件photoView学习

功能特性  支持放缩超出边界,多点触控和双击事件  滚动和滑动  和ViewPager等能完美兼容  矩阵变化等有回调,方便前台其他展示的改变  单击,长按都有回调提醒 源码剖析 那么怎么来学习他的源码呢,我们从以下几个部分来说吧  代码目录结构     从上面结构图中我们能知道他的功能总体划分,有了一个总体的认识啦.    样例  下面我们再来梳理一下他的调用流程,以一个简单的例子开始吧. 第一个是指定图片旋转90° [java] view plain copy  print? photo.s

ASP组件(二)

在上一讲中,我们学习了如何创建组件,使用了浏览器能力组件.File Access组件.AD Rotator组件和Content Linking组件,也知道了Server对象的CreateObject方法.MapPath方法和HTMLEncode方法.本讲将继续组件的学习. 一. Email组件:NTS Collaboration Data Objects我们在网上经常看到,许多站点均提供在线发信功能(即用表单实现Question提交,Support或信息反馈等等)或者给访问者发送确认信息.这一功

聊聊 Android 的 Service 组件

Android 开发的同学都知道,Android 有四大组件,分别是 Activity.Service.BroadcastReceiver 和 ContentProvider.在这里,我想跟大家聊一聊 Service 组件,我们从头开始,包括什么是 Service?Service 有什么作用?怎么使用它?需要关注哪些性能问题?什么情况下使用它最合适?好,废话少说,马上进入主题. 直译过来,Service 就是服务.它跟 Activity 不同,没有界面,不直接与用户进行交互,是一个可以在后台长时

.Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码]

原文:.Net 转战 Android 4.4 日常笔记(9)--常用组件的使用方法[附源码] 经过两天的学习,把常用的组件都学习了一遍,并做成了App 学习可能真没有捷径,跟学习html有点类似,都是一个控件一个控件学习并使用,最后拼凑成一个系统 链接:http://pan.baidu.com/s/1hqefzEW 密码:zbel  最低API 2.3 目标API 4.4 采用Android Studio 0.58IDE 希望给和我同样的初学者带来一些便利,和开发时候可以查询,第一个版本可能比较

asp,asp.net学习教程下载_自学过程

XML与ASP网站实作大全 ASP经典百例 ASP.NET 1.1专业开发 ASP.NET完全手册 ASP.NET 技术参考 ASP.netdatabase开发圣经 ASP数据库系统开发实例导航 怎样用ASP和COM进行Web编程 Asp.Net技术文档 ASP Net密技集錦(C#) 即时应用ASP脚本第二版 简单易学的ASP教程 ASP开发中的错误信息中文说明大全 10天学会ASP ASP中文使用手册 ASP.NET服务器控件高程 ASP.NET 实用全书 ASP 3.0高级编程 ASP.N

Microsoft Visual Studio.NET及Borland Delphi6初探

visual Microsoft Visual Studio.NET及Borland Delphi6初探 最近安装上了Visual Studio.NET和Borland Delphi6这两个号称下一代编程环境的东东,感觉新东西实在不少,下面就说说我的感觉. 首先说Visual Studio.NET的安装.Microsoft在这方面的霸气一直不改,我还记得当初装Visual C++5.0的时候,本来我已经有了中文版的IE3.0,可是他一定要我先装一个英文版的IE3.01,否则就不允许继续,真是不给

如何开发一个可复用的软件系统

如何创建一个可复用软件系统 译者序:本文是设计模式"Template Method"模板方法的一个延伸,将模板应用到了整个软件开发产品.首先将软件产品核心不变的业务逻辑部分抽象出来,对于在不同产品中的不同的部分,核心产品通过钩子调用钩子组件重的具体实现,这样开发不同的系统时,只要更改钩子组件的内容就实现了不同的产品.开发的关键就是抽象核心产品的功能.当然这种开发思想也是局限的,不是适合所有的开发项目(抽象所有项目的核心是没有意义的),这种开发思路比较适合针对于一个领域的产品开发,同一个

Android零基础入门第18节:EditText的属性和使用方法

原文:Android零基础入门第18节:EditText的属性和使用方法 EditText与TextView非常相似,它甚至与TextView 共用了绝大部分XML属性和方法.EditText与TextView的最大区别在于:EditText可以接受用户输入. 一.EditText简介 EditText支持的XML属性及相关方法见TextView表中介绍的与输入有关的属性和方法,其中比较重要的一个属性是inputType,用于为EditText设置输入类型,其属性值主要有以下一些. androi