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的改进与使用经验的更多相关文章

  1. dTree

    1.dtree.js源码 /*--------------------------------------------------| | dTree 2.05 | www.destroydrop.co ...

  2. dTree 动态生成树

    http://luohua.iteye.com/blog/451453 dTree 主页:http://destroydrop.com/javascripts/tree/ dTree是个很方便在页面生 ...

  3. .net_DevExpress控件使用经验总结

    (转)DevExpress控件使用经验总结DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.本文主要介绍我在使用DevExpress控件过程中,遇到或 ...

  4. dTree动态生成树(后台处理,简化前台操作)

    dTree是个很方便在页面生成树的 js 控件,如果你下载了,我猜里在几分钟之内便能在页面上显示出一颗树来. 它本身给的例子是通过一些静态数据构造树,下面我说一种通过查询的数据动态构造树的方法. 例子 ...

  5. 120项改进:开源超级爬虫Hawk 2.0 重磅发布!

    沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...

  6. 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)

    其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...

  7. 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...

  8. ITTC数据挖掘平台介绍(四) 框架改进和新功能

    本数据挖掘框架在这几个月的时间内,有了进一步的功能增强 一. 超大网络的画布显示虚拟化     如前几节所述,框架采用了三级层次实现,分别是数据,抽象Node和绘图的DataPoint,结构如下:   ...

  9. C# 3.0新语言特性和改进(一)

    引言 关于C#3.0的特性,园子里已经有了一大把,可能大家都很熟悉了,虽然本人开发中使用过,但自己还是需要记录一下,总结一下.同时也是后面写Linq知识的基础.希望有兴趣的朋友,可以看看. C# 3. ...

随机推荐

  1. hbase 性能调

    一. HBase的通用优化 1 高可用 在 HBase 中 Hmaster 负责监控 RegionServer 的生命周期,均衡 RegionServer 的负载,如果 Hmaster 挂掉了,那么整 ...

  2. jquery中获取radio选中值的正确写法

    错误写法: //只在IE下有作用,其他浏览器均获取的为第一个单选框的值 $('input[type=radio]').val(); 正确写法为: //兼容所有浏览器写法 $('input[type=r ...

  3. box-sizing定义的盒模型之间的区别

  4. NHibernate 错误

    Unable to locate persister for the entity named 'Model.Customer'.The persister define the persistenc ...

  5. Linux下安装Zookeeper

    Zookeeper是一个协调服务,可以用它来作为配置维护.名字服务.分布式部署: 下面,我来分享一下在Linux下安装Zookeeper的整个步骤,让大家少走弯路. 一.Zookeeper下载 [ro ...

  6. Extjs设置或获取cookie

    设置cookie var myCookie = Ext.util.Cookie.set(‘YourCookieName’,'YourValue’); 读取cookie Ext.util.Cookie. ...

  7. 一个将PDF转word、图片、PPT的在线工具

    smallpdf 真的超级棒! https://smallpdf.com/cn

  8. 【AI in 美团】深度学习在OCR中的应用

    AI(人工智能)技术已经广泛应用于美团的众多业务,从美团App到大众点评App,从外卖到打车出行,从旅游到婚庆亲子,美团数百名最优秀的算法工程师正致力于将AI技术应用于搜索.推荐.广告.风控.智能调度 ...

  9. leetcode 202. 快乐数 python实现

    思想: 对输入数据 把每个位数平方求和 得到结果如果是1 就返回真 否则 对这个结果递归 啥时候事后返回假: 返回假 说明进入无限循环了. 啥时候会无限循环? 某一次求平方和的结果,之前得到过这个结果 ...

  10. python opencv3 窗口显示摄像头的帧

    git:https://github.com/linyi0604/Computer-Vision # coding:utf8 import cv2 """ 在窗口显示摄像 ...