DTree的改进与使用经验
1、dtree.js源码
function Node(id, pid, name, url, title, target, icon, iconOpen, open) {
this.id = id; // 节点id
this.pid = pid; // 节点父id
this.name = name; // 节点显示名称;
this.url = url; // 节点超链接地址;
this.title = title; // 节点Tips文本;
this.target = target; // 节点链接所打开的目标frame(_blank, _parent, _self, _top)
this.icon = icon; // 节点默认图标;
this.iconOpen = iconOpen; // 节点展开图标;
this._io = open || false; // 节点展开标识;
this._is = false; // 节点选中标识;
this._ls = false; // 同级最后节点标识;
this._hc = false; // 包含子节点标识;
this._ai = 0; // 节点在节点数组中的索引值,初始值为0
this._p; // 保存父节点对象;
};
function dTree(objName,imagePath) {
this.config = {
target : null, // 默认的节点链接所打开的目标frame(_blank, _parent, _self, _top)
folderLinks : true, // true文件夹节点如果有超链地址,点击节点打开超链接而不是展开节点;false忽略超链展开或折叠节点;
useSelection : true, // true高亮显示选中的节点;false反之;
useCookies : true, // true使用Cookies保存节点状态;false反之;
useLines : true, // true使用虚线连接节点的缩进;false反之;
useIcons : true, // true使用图标;false反之;
useStatusText : false, // false不在状态栏显示节点名称;true反之;
closeSameLevel : false, // true同一级节点只能有一个处于展开状态;false反之;
inOrder : false, // false在整个节点数组中查找子节点;true在索引大于本节点的数组元素中查找子节点(如果子节点总是在父节点后面添加的话,设为true将加快tree的构建速度);
imagePath : null // 图片路径;
}
this.icon = {
root : (imagePath===undefined?'img/base.gif':imagePath + '/img/base.gif'), // 根节点图标
folder : (imagePath===undefined?'img/folder.gif':imagePath + '/img/folder.gif'), // 枝节点文件夹图标
folderOpen : (imagePath===undefined?'img/folderopen.gif':imagePath + '/img/folderopen.gif'), // 枝节点打开状态文件夹图标
node : (imagePath===undefined?'img/page.gif':imagePath + '/img/page.gif'), // 叶节点图标
empty : (imagePath===undefined?'img/empty.gif':imagePath + '/img/empty.gif'), // 空白图标
line : (imagePath===undefined?'img/line.gif':imagePath + '/img/line.gif'), // 竖线图标
join : (imagePath===undefined?'img/join.gif':imagePath + '/img/join.gif'), // 丁字线图标
joinBottom : (imagePath===undefined?'img/joinbottom.gif':imagePath + '/img/joinbottom.gif'), // L线图标
plus : (imagePath===undefined?'img/plus.gif':imagePath + '/img/plus.gif'), // 丁字折叠图标
plusBottom : (imagePath===undefined?'img/plusbottom.gif':imagePath + '/img/plusbottom.gif'), // L折叠图标
minus : (imagePath===undefined?'img/minus.gif':imagePath + '/img/minus.gif'), // 丁字展开图标
minusBottom : (imagePath===undefined?'img/minusbottom.gif':imagePath + '/img/minusbottom.gif'), // L展开图标
nlPlus : (imagePath===undefined?'img/nolines_plus.gif':imagePath + '/img/nolines_plus.gif'), // 无线折叠图标
nlMinus : (imagePath===undefined?'img/nolines_minus.gif':imagePath + '/img/nolines_minus.gif') // 无线展开图标
};
this.obj = objName; // 树对象名称(必须一致)
this.aNodes = []; // 节点数组
this.aIndent = []; // 当前节点到根节点次级节点(pid==-1),所有父节点是否是同级节点中的最后一个,如果_ls==true则数组对应元素之为0,反之为1
this.root = new Node(-1); // 默认根节点
this.selectedNode = null; // 选中节点的id(tree初始化之前)或它在字节数组中的索引值_ai(tree初始化之后)
this.selectedFound = false; // true存在选中的节点;false反之
this.completed = false; // tree html 文本构造完成
};
dTree.prototype.add = function(id, pid, name, url, title, target, icon, iconOpen, open) {
this.aNodes[this.aNodes.length] = new Node(id, pid, name, url, title, target, icon, iconOpen, open);
};
dTree.prototype.openAll = function() {
this.oAll(true);
};
dTree.prototype.closeAll = function() {
this.oAll(false);
};
dTree.prototype.toString = function() {
var str = '<div class="dtree">\n';
if (document.getElementByIdx) {
if (this.config.useCookies) this.selectedNode = this.getSelected();
str += this.addNode(this.root);
} else str += 'Browser not supported.';
str += '</div>';
if (!this.selectedFound) this.selectedNode = null;
this.completed = true;
return str;
};
dTree.prototype.addNode = function(pNode) {
var str = '';
var n=0;
// 默认在整个数组中搜索子节点
if (this.config.inOrder) n = pNode._ai;
// 遍历节点数组
for (n; n<this.aNodes.length; n++) {
// 只处理直接下级节点
if (this.aNodes[n].pid == pNode.id) {
// 临时变量
var cn = this.aNodes[n];
// 设置节点的父节点属性
cn._p = pNode;
// 设置节点的数组索引属性
cn._ai = n;
// 设置节点包含子节点标识_hc和同级最后节点标识_ls
this.setCS(cn);
// 设置节点target 属性
if (!cn.target && this.config.target) cn.target = this.config.target;
// 判断一个包含子节点的节点在Cookie中是否是展开状态
if (cn._hc && !cn._io && this.config.useCookies) cn._io = this.isOpen(cn.id);
// 判断是否允许包含子节点的节点带有超链接地址
if (!this.config.folderLinks && cn._hc) cn.url = null;
// 判断节点是否被选中
if (this.config.useSelection && cn.id == this.selectedNode && !this.selectedFound) {
// 初始化节点选中标志
cn._is = true;
// 从这里开始this.selectedNode值由id变为_ai(节点数组索引)
this.selectedNode = n;
// 初始化tree的选中标志
this.selectedFound = true;
}
str += this.node(cn, n);
// 判断本级最后一个节点,结束循环
if (cn._ls) break;
}
}
return str;
};
dTree.prototype.node = function(node, nodeId) {
// 节点前的线条或空白图标
var str = '<div class="dTreeNode">' + this.indent(node, nodeId);
if (this.config.useIcons) {
// 根据节点类型和状态确定节点的默认图标
if (!node.icon) node.icon = (this.root.id == node.pid) ? this.icon.root : ((node._hc) ? this.icon.folder : this.icon.node);
if (!node.iconOpen) node.iconOpen = (node._hc) ? this.icon.folderOpen : this.icon.node;
if (this.root.id == node.pid) {
node.icon = this.icon.root;
node.iconOpen = this.icon.root;
}
str += '<img id="i' + this.obj + nodeId + '" src="' + ((node._io) ? node.iconOpen : node.icon) + '" alt="" />';
}
// 节点文本及动作方法(带超链接、不带超链接)
if (node.url) {
str += '<a id="s' + this.obj + nodeId + '" class="' + ((this.config.useSelection) ? ((node._is ? 'nodeSel' : 'node')) : 'node') + '" href="' + node.url + '"';
if (node.title) str += ' title="' + node.title + '"';
if (node.target) str += ' target="' + node.target + '"';
if (this.config.useStatusText) str += ' onmouseover="window.status=\'' + node.name + '\';return true;" onmouseout="window.status=\'\';return true;" ';
if (this.config.useSelection && ((node._hc && this.config.folderLinks) || !node._hc))
str += ' onclick="javascript: ' + this.obj + '.s(' + nodeId + ');"';
str += '>';
} else if ((!this.config.folderLinks || !node.url) && node._hc && node.pid != this.root.id){
str += '<a href="javascript: ' + this.obj + '.o(' + nodeId + ');" class="node">';
}
str += node.name;
if ((node.url || ((!this.config.folderLinks || !node.url) && node._hc)) && node.pid != this.root.id) str += '</a>';
str += '</div>';
DTree的改进与使用经验的更多相关文章
- dTree
1.dtree.js源码 /*--------------------------------------------------| | dTree 2.05 | www.destroydrop.co ...
- dTree 动态生成树
http://luohua.iteye.com/blog/451453 dTree 主页:http://destroydrop.com/javascripts/tree/ dTree是个很方便在页面生 ...
- .net_DevExpress控件使用经验总结
(转)DevExpress控件使用经验总结DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或 ...
- dTree动态生成树(后台处理,简化前台操作)
dTree是个很方便在页面生成树的 js 控件,如果你下载了,我猜里在几分钟之内便能在页面上显示出一颗树来. 它本身给的例子是通过一些静态数据构造树,下面我说一种通过查询的数据动态构造树的方法. 例子 ...
- 120项改进:开源超级爬虫Hawk 2.0 重磅发布!
沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...
- ITTC数据挖掘平台介绍(四) 框架改进和新功能
本数据挖掘框架在这几个月的时间内,有了进一步的功能增强 一. 超大网络的画布显示虚拟化 如前几节所述,框架采用了三级层次实现,分别是数据,抽象Node和绘图的DataPoint,结构如下: ...
- C# 3.0新语言特性和改进(一)
引言 关于C#3.0的特性,园子里已经有了一大把,可能大家都很熟悉了,虽然本人开发中使用过,但自己还是需要记录一下,总结一下.同时也是后面写Linq知识的基础.希望有兴趣的朋友,可以看看. C# 3. ...
随机推荐
- java中举例说明对象调用静态成员变量
package org.hanqi.zwxx; public class Test { static int i=47; public void call() { System.out.println ...
- Adapter 适配器
意图 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 动机 在软件开发中,有的时候系统的数据和行为都正确,但接口不符合,我们应 ...
- oracle配置ODBC
摘自:http://www.cnblogs.com/shelvenn/p/3799849.html 我使用的Windows 10,64位的操作系统. 1.下载驱动包 base包:instantclie ...
- 全文搜索引擎 Elasticsearch (二) 使用场景
1.场景—:使用Elasticsearch作为主要的后端 传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力.这是因为早期的搜索引擎不能提供耐用的存储或其他经常需要的功能 ...
- Ionic实战三:Ionic 图片预览可放大缩小左右滑动demo-iClub图片预览
这个demo的主要功能有两个,一个是首页的导航向上拉动会浮动在最上面的效果,另一个就是我们平时非常实用的功能,就是图片预览功能 点击可以放大图片,并且可以左右滑动,还可以双击放大缩小图片以及双手指控制 ...
- 如何使用django显示一张图片
django显示图片对新手来说真的算是一个坑.. 这里记录下小白爬坑的历程. 首先,你需要一个可以运行的django服务器,能显示正常的html文本,无法显示图片 这是html的文本,可以显示文字,无 ...
- CODEVS 4655 序列终结者-splay(区间更新、区间翻转、区间最值)
4655 序列终结者 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 题目描述 Description 网上有许多题,就是给定一个序列,要 ...
- leetcode x 的平方根 python
x 的平方根 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: ...
- SLF4J versions 1.4.0 and later requires log4j 1.2.12 or later 终极解决
http://blog.sina.com.cn/s/blog_54eb26870100uynj.html 到SLF4J官方网站:http://www.slf4j.org/codes.html#log4 ...
- bzoj 1047 单调队列
做4次单调队列优化DP. /************************************************************** Problem: 1047 User: idy ...