MzTreeView 一次加载数据的树[@more@]

好东西当然要与大家分享。。。@与羊共舞的狼

MzTreeView 1.0 from---&gt>> http://www.meizz.com/

开发文档: http://www.meizz.com/Web/Article.asp?id=436
控件下载: http://www.meizz.com/Web/Download/MzTreeView10.rar
应用示例: http://www.meizz.com/Web/Demo/MzTreeView10.htm

说明 MzTreeView 1.0 是数据一次性加载,客户端节点异步展示的WEB脚本树。MzTreeView 1.0 的理论节点数设计上限为十万节点,在节点数三万的情况下页面打开时间小于 3 秒。无限层次无限节点的数的层级组成方式:id parentId。即每个节点除本身的节点id之外还有它的父层节点id,通过这种方式就可以组合成无限层级的树了。

在 MzTreeView 里都有一个虚的根节点,其ID为0,用户可见的根节点其父节点ID皆为0

MzTreeView 1.0在数据库库表里的字段名称:

字段名 字段的具体说明
id 节点ID(不可为0,可以是数字或字符)
parentId 本节点的父节点ID(若本节点已为根节点,此处填0)
text 节点的显示文本(一般不允许为空,不过有一种情况例外,即根节点,若根节点文本为空,这个根节点将不会在页面里显示)
hint 节点的说明注解
icon 节点的图标,MzTreeView 1.0允许每个节点拥有不同的图标(对应的名字在类里的icons和iconsExpand定义)
data 节点挂的数据,格式是 param=value&param=value&... url里?后的那串字符串格式,
url 每个节点允许拥有不同的链接,它为空或者为#时,树里这个节点的链接,点击将无反应
target 每个节点的链接允许在不同的target里打开,为空时取类里的默认值
method 点击该链接时所想触发的脚本语句

特注:每个字段值中不可有冒号: 不可以换行 引号酌情考虑应不与节点字符串的引号相冲突

设计模式 为了达到能够在浏览器中快速打开多节点树的页面,我做了很多的优化与创新,下面我将详细解说几项最重要的部分:

属性 MzTreeView 类的一些属性:

属性名 类型 属性的具体说明
MzTreeView.nodes 集合 服务器端给树指定数据源时数据存放的对象,具体存放格式如:
MzTreeViewHandle.nodes["parentId_nodeId"] = "text: nodeText; icon: nodeIcon; url: nodeURL; ...";
MzTreeView.url 地址字符串 可读写,树缺省的URL,默认值是 #
MzTreeView.target 目标框架名 可读写,树缺省的链接target,默认值是 _self
MzTreeView.name 字符 只读,树的实例名,同树实例化时作为参数传入(大小写敏感):
var Tree = new MzTreeView("Tree");
MzTreeView.currentNode 树节点 只读,树当前得到焦点的节点对象
MzTreeView.icons 集合 树所使用的所有图标存放
MzTreeView.iconsExpand 集合 树里展开状态的图标存放
MzTreeView.colors 集合 树里使用到的几个颜色存放

MzTreeView 在客户端的节点所拥有的属性:

属性名 属性的具体说明
node.id 数字文本,节点的ID
node.parentId 数字文本,节点对应的父节点ID
node.text 文本,节点的显示文本
node.hint 文本,节点的注释说明
node.icon 文本,节点对应的图标
node.path 文本,节点在树里的绝对路径:0_1_10_34
node.url 文本,该节点的 URL
node.target 文本,该节点链接的目标框架名
node.data 文本,该节点所挂载的数据
node.method 文本,该节点的点击对应处理语句
node.parentNode 对象,节点的父节点对象
node.childNodes 数组,包含节点下所有子节点的数组
node.sourceIndex 文本,服务器给予的数据里对象的 parentId_nodeId 的组合字符串
node.hasChild 布尔值,指该节点是否有子节点
node.isLoad 布尔值,本节点的子节点数据是否已经在客户端初始化
node.isExpand 布尔值,节点的展开状态

方法 MzTreeView 类的一些方法:

方法名 方法的具体说明
MzTreeView.toString() 类的默认初始运行
MzTreeView.buildNode(id) 将该节点的所有下级子节点转换成 HTML 并在网页上体现出来
MzTreeView.nodeToHTML(node, AtEnd) 将 node 转换成 HTML
MzTreeView.load(id) 从数据源里加载当前节点下的所有子节点
MzTreeView.nodeInit(sourceIndex, parentId) 节点的信息初始,从数据源到客户端完整节点的转化
MzTreeView.focus(id) 聚集到某个节点上
MzTreeView.expand(id[, sureExpand]) 展开节点(包含下级子节点数据的加载初始化)
MzTreeView.setIconPath(path) 给节点图片设置正确的路径
MzTreeView.nodeClick(id) 节点链接点击时同时被触发的点击事件处理方法
MzTreeView.upperNode() 跳转到当前聚集节点的父级节点
MzTreeView.lowerNode() 跳转到当前聚集节点的子级节点
MzTreeView.pervNode() 跳转到当前聚集节点的上一节点
MzTreeView.nextNode() 跳转到当前聚集节点的下一节点
MzTreeView.expandAll() 展开所有的树点,在总节点量大于500时这步操作将会比较耗时

示例
//MzTreeView1.0网页树类, 在实例化的时候请把实例名作参数传递进来
function MzTreeView(Tname)
{
if(typeof(Tname) != "string" || Tname == "")
throw(new Error(-1, '创建类实例的时候请把类实例的引用变量名传递进来!'));

//【property】
this.url = "#";
this.target = "_self";
this.name = Tname;
this.wordLine = false;
this.currentNode = null;
this.useArrow = true;
this.nodes = {};
this.node = {};
this.names = "";
this._d = "x0f";
this.index = 0;
this.divider = "_";
this.node["0"] =
{
"id": "0",
"path": "0",
"isLoad": false,
"childNodes": [],
"childAppend": "",
"sourceIndex": "0"
};

this.colors =
{
"highLight" : "#0A246A",
"highLightText" : "#FFFFFF",
"mouseOverBgColor" : "#D4D0C8"
};
this.icons = {
L0 : 'L0.gif', //┏
L1 : 'L1.gif', //┣
L2 : 'L2.gif', //┗
L3 : 'L3.gif', //━
L4 : 'L4.gif', //┃
PM0 : 'P0.gif', //+┏
PM1 : 'P1.gif', //+┣
PM2 : 'P2.gif', //+┗
PM3 : 'P3.gif', //+━
empty : 'L5.gif', //空白图
root : 'root.gif', //缺省的根节点图标
folder : 'folder.gif', //缺省的文件夹图标
file : 'file.gif', //缺省的文件图标
exit : 'exit.gif'
};
this.iconsExpand = { //存放节点图片在展开时的对应图片
PM0 : 'M0.gif', //-┏
PM1 : 'M1.gif', //-┣
PM2 : 'M2.gif', //-┗
PM3 : 'M3.gif', //-━
folder : 'folderopen.gif',

exit : 'exit.gif'
};

//扩展 document.getElementById(id) 多浏览器兼容性
//id 要查找的对象 id
this.getElementById = function(id)
{
if (typeof(id) != "string" || id == "") return null;
if (document.getElementById) return document.getElementById(id);
if (document.all) return document.all(id);
try {return eval(id);} catch(e){ return null;}
}

//MzTreeView 初始化入口函数
this.toString = function()
{
this.browserCheck();
this.dataFormat();
this.setStyle();
this.load("0");
var rootCN = this.node["0"].childNodes;
var str = "";

if(rootCN.length>0)
{
this.node["0"].hasChild = true;
for(var i=0; istr += this.nodeToHTML(rootCN[i], i==rootCN.length-1);
setTimeout(this.name +".expand('"+ rootCN[0].id +"', true); "+
this.name +".focusClientNode('"+ rootCN[0].id +"'); "+ this.name +".atRootIsEmpty()",10);
}

if (this.useArrow) //使用方向键控制跳转到上级下级父级子级节点
{
if (document.attachEvent)
document.attachEvent("onkeydown", this.onkeydown);
else if (document.addEventListener)
document.addEventListener('keydown', this.onkeydown, false);
}
return ""οnclick='"+ this.name +".clickHandle(event)' "+
"οndblclick='"+ this.name +".dblClickHandle(event)' "+
">"+ str +"

转载于:http://blog.itpub.net/7369349/viewspace-893534/

MzTreeView节点树(梅花雪)相关推荐

  1. 一个好用的js树 梅花雪MzTreeView

    主要是速度特别快 用另外一个js树,要100秒,用这个,1秒就出来结果.推荐一下! 附件中文档很全,忘记是哪位朋友在QQ上发给我的,在此,共享出来!

  2. 梅花雪2.0树数据库数据绑定实例(vs2008)

    梅花雪2.0树型结构sqlserver数据库数据绑定,IDE是VS2008,数据库是sql server2005,部分代码如下,代码实例[点击这里]下载. 效果图 数据库结构代码: CREATE TA ...

  3. Struts结合梅花雪实现动态生成树

    昨天终于完成了动态树的测试,虽然还没有正式用于产品. 测试用到的知识点:struts,jsp,梅花雪1.0,Ms SQL2000. 部分代码如下: public ActionForward execu ...

  4. web tree dojo 0.3 和 梅花雪 MzTreeView1.0

    开始: 首先大家先了解一下json. json主要是来传输数据.起着和xml文件相同的作用,用于后台java和前台js的数据交互. 优点:简单,易于操作.可以看做是java中的map 确定:由于简单不 ...

  5. LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历--递归,迭代--反向压栈--C++解法

    LeetCode 589. N-ary Tree Preorder Traversal-多子节点树前序遍历–递归,迭代–反向压栈–C++解法 LeetCode题解专栏:LeetCode题解 LeetC ...

  6. 栈解析html文件,利用栈将html源码解析为节点树

    /// 如何利用栈将html解析成节点树 /// 首先html是由一个个节点组成,最大的节点为节点   她有两个子节点 和 /// 首先我们将压入栈中 再将 压入栈中 遇到出栈  压入栈中 遇到 出栈 ...

  7. Jackson高级操作————节点树

    引言 继<Jackson快速入门>基础篇之后的树模型相关操作. 节点树模型 ObjectMapper构建JsonNode节点树,类似于DOM解析器的XML. @Testpublic voi ...

  8. Cocos2d之Node类详解之节点树(二)

    一.声明 本文属于笔者原创,允许读者转载和分享,只要注明文章来源即可. 笔者使用cocos2d框架的cocos2d-x-3.3rc0版本的源代码做分析.这篇文章承接上篇<Cocos2d之Node ...

  9. 修改的梅花雪的日期控件。。只是一些小改动

    根据梅花雪的日期控件修改而来做了一些小扩充,样式做了一些调整 转载请注明原作者是梅花雪,假正经哥哥只是做了小修改,谢谢大家, 调用实例图片的样式实例调用,api 参考原说明文档 <script  ...

  10. 前端:JS/25/DOM官方定义,DOM分类,HTML节点树(节点关系,节点类型,),核心DOM中公共的属性和方法(节点访问,查找DOM节点,节点属性,节点的创建,追加和删除)

    DOM官方定义 DOM,Document Object Model,文档对象模型,我们可以把网页中的所有"东西"看成是对象": DOM的官方定义:DOM可以使用脚本,动态 ...

最新文章

  1. 姚班三兄弟3万块创业八年,旷视终冲刺港股
  2. 【Flutter】StatefulWidget 组件 ( FloatingActionButton 组件 | RefreshIndicator 组件 )
  3. css命名规范和书写规范
  4. 知识图谱学习笔记-图操作
  5. Statistical language model 统计语言模型
  6. 30分钟正则表达式入门
  7. Committee和Virtual Project Team的关系
  8. call、apply和bind的原生实现
  9. leetcode题解25-K个一组翻转链表
  10. I have to mention the search function at the
  11. Windows Notepad 居然要迎来大更新了!
  12. Leetcode 142. Linked List Cycle II
  13. 偏最小二乘回归(PLSR)和主成分回归(PCR)
  14. mysql 判断质数_2020-09-20:如何判断一个数是质数?
  15. Java垃圾回收的细节
  16. 如何把Kotlin代码转成Java代码、把Java代码转成Kotlin代码
  17. 201421440018王坤的作业一
  18. 嘿!大三了怎么找到对象?膜拜!
  19. 中式糕点:有网红的命,也有网红的病
  20. linux系统启动卡住不动了,Linux不讲武德——卡在开机界面就不动了

热门文章

  1. 32、出任爬虫公司CEO(爬取职友网招聘信息)
  2. windows批量修改文件权限
  3. android popWindow组件微信式实现(较完整版)
  4. APIMonitor安装
  5. 人工智能NLP在金融领域的发展趋势和实践经验
  6. 在word中公式太长,用公式编辑器怎样设置才能自动换行?
  7. 字体下面有背景颜色css,CSS 颜色 字体 背景 文本 边框 列表 display属性
  8. unity3d让模型不受3dCamera FOV的影响
  9. 【洛谷】P1427 小鱼的数字游戏
  10. 项目质量管理__七种基本质量工具__老七工具和新七工具