`

简单的js树-rTree,可负载25万个节点(非ajax),代码少,易用易懂。更新checkbox补丁代码(在7楼)

阅读更多
这是我写的第一个js的控件,修修改改快大半年了,公司的老项目里在用。
废话不多说,直接说特点吧!
r.setNodedbc(true);根(有子节点)是否可以双击打开关闭。
r.setNodehref(false);根(有子节点)是否可以触发事件。
r.setLazy(false);是否延迟生成树。
r.canAlterbg(true);点击节点后改变背景色。这是用jquery做得补丁式的功能。
8个参数 id,父id,显示字符,关闭时图片路径,打开时图片路径,href的路劲/调的js方法,目标,是否关闭(lazy=true时无效)。
我觉得最大的特色就是lazy,我写的时候发现,树慢就慢在构造上,加载数据到不慢,所以lazy就是数据一次性加进去,但一次只生成一层。如果要打开好几层的话,可以自己调openNode()方法。
像大家说的checkbox等功能,我做过例子,是通过jquery后期再添加进去的,觉得jquery打补丁真的不错。
号称的250000条数据,是在全部都是随机节点的情况下,不死机的状况。就是一层的节点不能过大。。不然也会死。
代码很少200行,注释70行,大家如果用得上的话,我就最开心不过了!!!
下面是构造的代码,同dtree,有啥意见多提提,我好再改进,谢谢啦!!!

!!!!!!如果用js方法的话 参数要用&quot包起来。如 javascript:afun("xxx");!!!!!!!!!!!!

全部打开按钮,只适用于不使用lazy的情况

var r=new rTree("r");
r.setNodedbc(true);//双击开关节点
r.setNodehref(false);//根是否能绑事件 
r.setLazy(false);//延时构造树 要加入1000条以上节点时,请设为true
r.canAlterbg(true);//点击节点后,改变节点背景色
r.add(1,0,"a哈罗",'images/folderclose.gif','images/imgfolder.gif','javascript:alert("我们都是哈罗!!!")');
r.add(2,1,"男哈罗",'images/hello1.gif','',"./baidu.mht");
r.add(3,1,"b哈罗",'','images/hello1.gif');
r.add(4,1,"c哈罗");
r.add(5,1,"d哈罗");
r.add(6,2,"e女哈罗",'','',"images/hello1.jpg","show");
r.add(7,2,"f哈罗");
r.add(8,3,"g哈罗");
r.add(9,3,"h哈罗","","","","",true);
r.add(10,3,"i哈罗");
for(var i=11;i<11;i++){//设置随机的节点,10000的话还是很快的。。刷的一下就出来
	r.add(i,parseInt(Math.random()*i),"测试"+i);
}
//r.useBgImg("images/green.jpg");
r.startTree();

分享到:
评论
68 楼 tracy821 2009-09-17  
很不错的东西,看看能不能移置到我们的项目里
67 楼 rox 2009-09-17  
原创很不错,能够有和其他多种树的使用和性能对比,更好了:)
66 楼 fm_974 2009-09-17  
malasun 写道
借楼主个人气:看看这个树
http://sites.google.com/site/webjslib/
和这个框架
http://sourceforge.net/projects/sopo/files/


貌似这的例子Chrome下一个也不能用...

楼主的精神是可嘉的,虽然现在现在的树的例子已经不少了
65 楼 whaosoft 2009-09-16  
很不错啊!
64 楼 lianda220 2009-09-14  
很好很强大!
63 楼 sjpsega 2009-09-13  
不错不错,支持一下~~~~
62 楼 qhhhn 2009-09-11  
记号,估计用得上..
61 楼 lr1213 2009-09-11  
fyf_008 写道
lr1213 写道
当测试10000条时,浏览器基本卡的动不了!


一般用1-2百个节点就够了,没必要太多考虑性能问题,10000个节点,扯皮的。。。
你做项目,一次生成这么多?????????
这玩儿缺点是难看,还有些基本功能没集成,我不会用jquary怎么办???????????
总之,100个垃圾特点,不如一个有用的特点,整什么垃圾25万个节点呢。
又不是存储结构。而且生成树的方式太恶心,没对象感

25W确实也是扯淡的,你能完美做到我只能说你牛逼!呵呵,lz的树还是值的学习的。
60 楼 fyf_008 2009-09-11  
lr1213 写道
当测试10000条时,浏览器基本卡的动不了!


一般用1-2百个节点就够了,没必要太多考虑性能问题,10000个节点,扯皮的。。。
你做项目,一次生成这么多?????????
这玩儿缺点是难看,还有些基本功能没集成,我不会用jquary怎么办???????????
总之,100个垃圾特点,不如一个有用的特点,整什么垃圾25万个节点呢。
又不是存储结构。而且生成树的方式太恶心,没对象感
59 楼 lr1213 2009-09-11  
当测试10000条时,浏览器基本卡的动不了!
58 楼 xiaoxie2007 2009-09-10  
有右键菜单吗?如果没有最好加上就更完美了
57 楼 malasun 2009-09-10  
借楼主个人气:看看这个树
http://sites.google.com/site/webjslib/
和这个框架
http://sourceforge.net/projects/sopo/files/
56 楼 rowanh 2009-09-09  
wa327114652 写道
楼主你好,我是初学者,我下载下来后不会使用!希望你会发表一下使用说明,谢谢!

在head里导入用到的js和css。
页面里加一个<div id="main"></div>
在后面加上
<script>
var r=new RTree('r');
r.add('','').....
</script>
静态的树,就直接添加节点。
动态的改成
<c:foreach items='' var='vo'>
r.add('${vo.id}','${vo.pid}'......);
</c:foreach>
55 楼 rowanh 2009-09-09  
delino 写道
看了下你的帖子。没看代码。

我个人觉得 ajax 树的效率肯定会高于 静态树,你一次性加载 
父节点,子节点,传输的数据量会很大。

如果用ajax 树,就会好的多,而且资源节省也多的多了,
第一次只加载 父节点。
当用户点击父节点的时候,再去加载该父节点的子节点,但是只加载一次,第二次点击就是静态节点了(上一次点击的获得的数据保存到该父节点下),
个人感觉这样会节省大量资源。

试想,有几个人会去一个个节点都点开啊?
第一:没这需要
第二:还是没需要

其实25W条数据 是没有意义的,最多算是一个压力测试,当数据量多的时候,应该考虑  快速查询功能  而不是树了。
比如当在input 里输入  需要的节点(模糊搜索)时,js 自动定位打到 该 节点,这才是有意义的。 

做系统,有一个最大的 基础 就是   用户体验。方便才是第一的


其实25W条数据有实际的意义吗?

恩,确实如你说的一样。ajax的传输流量小(没打开的节点不占流量),但是传输频率多,后台调用次数多。
当时只想着,减少服务器访问次数,和去掉ajax树中叶子前面有加号的问题。
还有个原因就是,觉得ajax树用起来会烦点。。。
25万,的确是没什么意义。我自己用最多也就1000多个节点。
54 楼 delino 2009-09-09  
对了,关于有人说的 全部展开。

我觉得可以这样解决。。

1. 一个一个的展开。 当第一个展开好后, callback 一下,展开后一个。

2. 在 数组 里 put 好数据后,分批 放入 各个父节点下
53 楼 delino 2009-09-09  
看了下你的帖子。没看代码。

我个人觉得 ajax 树的效率肯定会高于 静态树,你一次性加载 
父节点,子节点,传输的数据量会很大。

如果用ajax 树,就会好的多,而且资源节省也多的多了,
第一次只加载 父节点。
当用户点击父节点的时候,再去加载该父节点的子节点,但是只加载一次,第二次点击就是静态节点了(上一次点击的获得的数据保存到该父节点下),
个人感觉这样会节省大量资源。

试想,有几个人会去一个个节点都点开啊?
第一:没这需要
第二:还是没需要

其实25W条数据 是没有意义的,最多算是一个压力测试,当数据量多的时候,应该考虑  快速查询功能  而不是树了。
比如当在input 里输入  需要的节点(模糊搜索)时,js 自动定位打到 该 节点,这才是有意义的。 

做系统,有一个最大的 基础 就是   用户体验。方便才是第一的


其实25W条数据有实际的意义吗?
52 楼 wa327114652 2009-09-09  
楼主你好,我是初学者,我下载下来后不会使用!希望你会发表一下使用说明,谢谢!
51 楼 phoenixup 2009-09-09  
先Mark一下,对JavaScript不擅长。。。不过有的时候还必须要用~~
50 楼 rowanh 2009-09-08  
banrui 写道
不错,感觉跟dTree有点象

最早的时候是读取json数据的。。。别人都感觉烦。。为了易用,学习了dtree的数据添加方式。
49 楼 eagledame 2009-09-08  
很好的资料,呵呵谢谢楼主共享*_*

相关推荐

    超简单的js树控件,最大支持25万个节点(非ajax)自己写的。

    自己写的js树,代码少,逻辑简单,可以很快掌握。 功能类似dtree,但最大负载量比dtree大,在火狐下开启这个js树的 setlazy(true)方法,可以在5秒内生成250000个节点的树(随机添加的节点)。 例子中是生成10000个...

    NN-RTree.rar_RTree_satellite_visual c

    NN-RTree.rar_RTree_satellite_visual c是一个与计算机科学和信息技术相关的项目,特别是涉及到空间索引和数据可视化。此项目使用C++编程语言实现了一种名为NN-Tree(Nearest Neighbor Tree)的数据结构,该数据结构...

    RTree C++ 源代码

    在C++中实现RTree,可以利用模板类(Template)来创建一个通用且可扩展的数据结构。下面将详细讨论RTree的基本原理以及C++实现的关键点。 1. RTree基本原理: RTree是一种动态的、自平衡的树状数据结构,用于管理...

    Rtree jquery 树插件

    3. **简洁API**:RTree的API设计简洁明了,易于理解和使用,无论是初始化树结构,还是进行动态添加、删除和更新节点,都只需要几行代码即可实现。 4. **多样的操作**:支持节点的展开、折叠、选中、取消选中等基本...

    rtree c代码完全实现

    在`rtree.c`中,可能会采用分层结构来表示RTree,每个节点可以包含多个子节点,每个子节点对应一个数据项或者一个覆盖所有子节点的最小边界矩形。RTree的插入操作通常涉及到节点的分裂,以保持树的平衡;删除操作...

    Rtree核心代码(C语言)

    C语言实现的Rtree核心代码通常包括一系列关键模块,如节点管理、分裂算法、空间体积计算以及测试用例。以下是对这些文件名所代表的模块及其功能的详细解释: 1. **RECT.C**:此文件可能包含了矩形数据结构的定义和...

    hilbert-rtree.rar_Hilbert_RTree_hilbert rtree

    R树通过构建一个树状结构来存储一组多边形或矩形对象,每个内部节点代表一个区域,包含若干子区域,而叶节点则对应具体的数据对象。在查询时,R树可以有效地减少需要检查的对象数量,从而提高查询效率。 希尔伯特R...

    RTree的java代码实现

    在`rtree-master`这个项目中,可能包含了RTree的Java源代码实现,包括上述的各种组件和算法。你可以通过阅读源代码来理解其内部工作原理,也可以对其进行修改以满足特定需求。此外,这个项目可能还提供了示例和测试...

    Rtree索引方法C++源代码

    删除操作需要找到包含目标对象的矩形,然后根据具体情况更新树结构。查询操作则是寻找与给定矩形有交集的所有对象,通常采用深度优先搜索策略。 C++源代码实现Rtree时,通常会使用STL容器,如vector和set,来存储...

    terraformer-geostore-rtree:Terraformer的GeoStore的RTree索引

    该索引基于最初由乔恩·卡洛斯·里维拉(Jon-Carlos Rivera)编写的代码,可以在MIT许可证下找到,为正在安装Node.js $ npm install terraformer-geostore-rtree浏览器在浏览器中,需要 。 如果愿意,可以使用安装...

    RTree R树数据结构

    一个R树节点可以包含多个数据项,每个数据项代表一个对象的空间边界(多边形或矩形)。节点之间的关系通过重叠边界来建立,使得在高维空间中的数据能够以较低的维度表示,从而降低存储和查询的复杂性。当节点的数据...

    RTree_java_R树的实现_rtree搜索_

    在Java中实现R树,首先需要理解R树的节点结构,包括内部节点和叶节点。内部节点通常包含多个子节点,并且每个子节点代表一个边界框;叶节点则存储实际的数据对象,每个数据对象也有一个对应的边界框。 1. **R树的...

    TM-RTree:用于范围查询的通用移动对象的索引

    TM-RTree是一种针对通用移动对象的索引结构,它被提出用来有效地支持在时间和空间条件下的范围查询,同时还考虑了移动对象的运输模式。传统上,移动对象数据库的研究主要集中在单一的环境,如自由空间和道路网络,但...

    Rtree-java

    1. **节点和分裂**:R树的每个节点可以包含多个矩形区域(边界框,BoundingBox),这些区域代表了子节点的数据范围。当一个节点的子节点数量超过预设阈值时,节点会进行分裂,创建新的子节点并重新分配边界框。 2. *...

    Rtree-1.2.0-cp310-cp310-win_amd64.whl.zip

    标题中的“Rtree-1.2.0-cp310-cp310-win_amd64.whl”是一个Python扩展库的发行版本,名为Rtree,版本号为1.2.0,专为Python 3.10编译,并且是针对Windows 64位(amd64)系统的。Rtree是一个空间索引库,它实现了R树...

    Rtree-1.0.1-cp310-cp310-win32.whl.zip

    《Rtree库在Python中的应用详解》 在Python编程中,空间索引是地理信息系统(GIS)和数据科学领域不可或缺的一部分。Rtree库是Python中一个高效的空间索引库,它实现了R-树数据结构,专门用于处理多维几何对象,如...

    彻底弄懂RTree索引

    - **非叶子结点**:非叶子节点至少有m个孩子节点,最多M个,且每个节点的MBR覆盖其所有孩子节点的MBR。 - **平衡性**:R树是平衡树,尽量保持树的高度较小,以减少因树深度过大而导致的磁盘I/O操作频繁,从而提高...

    C++R-Tree代码

    C++ R-Tree代码是一种实现空间索引的数据结构,它在地理信息系统、数据库和计算机图形学等领域广泛应用。R-Tree是一种多维空间索引结构,主要用于高效存储和检索多维数据,例如地理位置坐标、图像像素等。下面我们将...

Global site tag (gtag.js) - Google Analytics