`
zhanchaojiang
  • 浏览: 112847 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

原创jquery插件treeTable

阅读更多

     由于工作需要,要直观的看到某个业务是由那些子业务引起的异常,所以我需要用树表的方式来展现各个层次的数据。

需求:

         1、数据层次分明;

         2、数据读取慢、需要动态加载孩子节点;

         3、支持默认展开多少层。

     在网上找到了很多资料,发现treeTable方面的组件质量都不高,有些还不错样式不符合,性能也比较差。想想树表也挺简单的,不就是通过隐藏或者展现某些tr来实现嘛。于是乎,自己写一个。


      2011年5月4号恰好放假一个下午,于是在家里风风火火开始构造自己的树表插件。

      样式我就用了http://www.hanpau.com/index.php?page=jqtreetable,包括图片以及参数命名都借鉴了。但这款插件质量不怎样,使用方式很麻烦,效率低。

 

一、使用接口

     个人觉得,接口这部分是一款插件是否好用的核心。

 

  jqTreeTable的用法:

 

  html结构

<table id="id">
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
</table>

 

  js调用

var map = [0, 1, 1, 0, 4, 5];
var options = {};
$("#id").jqTreeTable(map, options);

 

  这个使用方式比较麻烦,后台不仅要构造html,而且还要构造出map的数组。


 

 所以,我自己的组件改造了这种结构,如下:


   html结构

<table id="id">
<tr id="1"><td>1</td></tr>
<tr id="2" pId="1"><td>2</td></tr>
<tr id="3" pId="1"><td>3</td></tr>
<tr id="4" pId="3"><td>4</td></tr>
</table>


   js调用

var options = {};
$("#id").jqTreeTable(options);

 

    我这种方式只需要构造html,把父子关系当作自定义属性放在html中,使用相对方便。(注意:我刚开始是使用 key="1" pKey="2"的方式来标识一行的数据,以及行之间的关系,但想到以后通过自定义属性key来选择行效率比较低,所以改为id来存储行的唯一标识。)


二、html的格式

    在jqTreeTable中:

 

    扣红的html对应的格式是:

<tr>
<td>6</td>
<td>
<img src="../images/vertline.gif" class="preimg">
<img src="../images/vertline.gif" class="preimg">
<img src="../images/blank.gif" class="preimg">
<img src="../images/tv-collapsable.gif" class="parimg" id="treet16">Child of 4
</td>
<td>[0, 2, 3, 4, 6]&nbsp;</td>
<td>4</td>
<td>[7]</td>
</tr>


 这里有两个问题:

  1、都用图片在网速慢的情况时会产生很多图片占用符...,不好看。

  2、直接用图片会产生很多小图片,且不能合并。


以下是我优化的结构:


<tr>
    <td>6</td>
    <td>
        <span class="pre_span">
            <span class="vertline"></span>
            <span class="vertline"></span>
            <span class="blank"></span>
            </span>
        <span class="collapsable"></span>
         Child of 4
    </td>
    <td>[0, 2, 3, 4, 6]&nbsp;</td>
    <td>4</td>
    <td>[7]</td>
</tr>


 这样解决了上述问题:

1、在网速慢的情况时只不过看不到背景,可不会出现图片占用符。

2、使用背景偏移的方式,可以把小图片合并在同张图片中。


三、原创treeTable的实现

基本逻辑

1、展开节点的图标有分最后一个跟非最后一个,例如:展开节点时最后一个的展开和最后一个的展开。(需要isLastOne)

2、如果父节点是最后一个节点,则前缀加,如果父节点不是最后一个节点,则前缀加。(需要isLastOne、hasChild)

3、如果有孩子,则显示+或-号,如果没有则是普通的叶子节点。(需要hasChild)

4、有孩子的节点点击则展开或者隐藏相应的子节点。(需要hasChild)
5、如果存在前一个兄弟节点,则使用节点的前缀图标,若不存在则用父节点的图标。(需要isFirstOne)

实现过程

1、在html中,我只是把父子节点的关系写在自定义属性,但对于节点是否有孩子(hasChild),是否是最后一个节点(isLastOne),是否是第一个节点(isFirstOne),都还不知道。所以第一步要分析出这些信息,把这些信息都记录到自定义属性。【注意:这些信息其实也可以记录到DOM对象的自定义属性中,但DOM对象的自定义属性无法在生成html的时候初始化,所以不采用。】

2、先扫描所有的tr,构造出两个map,分别记录{'pId' => ['id1', 'id2']}和{id => pId}的关系。

3、再次扫描所有的tr,根据两个map的关系,给tr增加hasChild、isLastOne、isFirstOne等自定义标签,并开始构造节点图标。

4、给整个table增加点击事件监控,如果是来自(hasChild)的父节点则进行点击事件。【亮点:jqTreeTable是给每个图标都绑定事件,而我是给整个table绑定一个点击事件,提高性能。】


最后效果:




5月4号那天,花了下午完成基本功能,晚上一直自主加班到1点完善功能和优化性能,包括使用span替换img,使用table整体的点击事件等。为自己的执着而加班,最后效果还比较满意。还差将图片合并成一张,再改改css,就ok了。

 

 


原创jquery插件treeTable v1.1

这个版本提高了性能,做了以下改进:


* 1、使用了Css Sprite Tools 合并了分散的图标

* 2、使用了.id的方式来代替原来[pId=id],这样选择孩子效率更高

* 3、把css剥离出来,增加动态添加css,每次家在前判断是否添加过


关于第二点,非常感谢onli同学的提醒。但我并没有直接修改我的接口,直接除去pId,而是在第一次遍历时将pId作为class名添加到节点中。这样有两个好处:

(1)接口可读性会比较好,pId比class更容易理解。

(2)第二点,如果直接使用class,那节点本来就有样式,这样获取到的className还要去分解空格得到pId,挺麻烦的。

 

原创jquery插件treeTable V1.3

这个版本扩展了事件,做了以下改进:

* 1、增加onSelect事件,onSelect: function($treeTable, id){}

* 2、增加beforeExpand事件,beforeExpand : function($treeTable, id){}

 

动态加载节点就靠beforeExpand 事件了。

 

 

原创jquery插件treeTable V1.4.2

这个版本修复了bug,做了以下改进:


* 1、修复了多个tableTree不在同个页面的bug,并且可以让不同的tableTree使用不同的主题。

* 2、增加了controller的自定义标签来控制可点击的区域。

 



 

  • treeTable.rar (35.1 KB)
  • 描述: treeTable V1.0
  • 下载次数: 424
12
0
分享到:
评论
13 楼 zk110913230 2016-09-02  
  
12 楼 38477490 2016-08-31  
条件搜索动态创建的treetable,第一次点击能正常进入beforeExpand。再次条件搜索创建的treetable并点击展开获取子级则不能进入beforeExpand
11 楼 xdl185 2013-10-10  
  
10 楼 taoer88 2013-02-22  
如果连续点击展开,会加载一堆。。。。
9 楼 rockethj8 2013-01-28  
亲,你的树的连接线能不能连起来?断开了不好看
8 楼 cdxdd150 2012-12-18  
为啥发到服务下去访问折叠展开的图标看不见了呢,而直接双击打开可以看见的
7 楼 bawfgfhv 2012-12-10  
  小数据量可用,数据很的时候,FF可用  ,IE下基本上死 翘翘
6 楼 iProgramming 2012-11-19  
楼主 您这个插件只能在jquery v1.4.2 下才兼容 ie 啊
5 楼 shelleydiu 2012-10-25  
貌似不可以所有的tr都动态加载,只能加载子的tr,是这样的吗
4 楼 shelleydiu 2012-10-24  
请问下,这个控件可以动态新增父节点吗
3 楼 ok6801557 2012-09-11  
大神,为什么我在的我页面中引用原创“jquery插件treeTable V1.4.2”在页面中不会出现树表格呢。
2 楼 list263 2012-05-28  
效率怎么样,比如1000条以上的数据,或者10000条...
1 楼 long7610 2012-04-06  
请问如何设置默认让节点折叠?

相关推荐

    原创jquery插件treeTable.pdf

    使用 TreeTable 非常简单,首先需要引入 jQuery 库和 treeTable 插件的 JS 文件,然后通过 jQuery 选择器调用 `.treeTable()` 方法并传入配置对象。例如: ```html &lt;script src="/script/jquery.js" type="text/...

    原创jquery插件treeTable.docx

    TreeTable 是一个基于 jQuery 的插件,用于将普通的表格转换为具有树状结构的表格,使得数据呈现更加层次化和有组织。这个插件在设计时考虑了良好的浏览器兼容性,支持IE6及以上版本,以及Firefox、Chrome、Opera和...

    jquery 异步treeTable树形插件

    《jQuery异步treeTable树形插件详解及应用实践》 在Web开发中,数据的展示方式多种多样,其中树形结构是一种常见的数据组织形式,它能够清晰地呈现出层次关系,便于用户理解和操作。jQuery异步treeTable插件是用于...

    jquery.treeTable.js

    jquery.treeTable.js jquery.treeTable.js jquery.treeTable.js jquery.treeTable.js jquery.treeTable.js jquery.treeTable.js

    jquery的TreeTable插件

    **jQuery TreeTable插件详解** 在网页开发中,数据的展示方式多种多样,其中树形表格(TreeTable)是一种常用且高效的数据呈现形式,尤其适用于层次结构清晰、关系复杂的数据。jQuery TreeTable插件就是用来将普通...

    jquery-treetable

    今天我们将深入探讨jQuery TreeTable插件,它为开发者提供了一种简单、灵活的方式来创建可扩展、交互式的树形表格。 jQuery TreeTable是基于流行的JavaScript库jQuery的一款插件,其核心功能在于将普通的HTML表格...

    jquery-treetable简单实用树表格demo.rar

    jQuery-treetable是一款强大的JavaScript插件,它能够将普通的HTML表格转换为可折叠、可展开的树形结构,使得数据层次清晰,便于用户理解和操作。下面我们将详细探讨这款插件的使用方法和特点。 首先,jQuery-...

    用jQuery的treetable实现的树形table

    使用jQuery的treetable插件,你需要先确保已经引入了jQuery库和treetable的JavaScript文件。通常,这可以通过在HTML文件中添加script标签来完成。例如: ```html &lt;script src="https://code.jquery....

    jquery-TreeTable树型结构 源码及示例

    这个"jquery-TreeTable树型结构 源码及示例"压缩包包含了实现这一功能的核心源码和示例,帮助开发者更好地理解和应用这个插件。 首先,jQuery TreeTable的基本概念是利用HTML表格的特性,通过添加特定的CSS类和使用...

    jquery-treetable插件demo 下载

    **jQuery Treetable 插件详解** jQuery Treetable 是一个功能强大的JavaScript插件,它允许用户将HTML表格转换为可折叠的树形结构。这个插件尤其适用于展示层次关系的数据,例如组织结构、文件系统或者任何有层级...

    jQuery树型表格jquery-treetable

    jQuery-treetable插件是这种功能的一个典型实现,它允许用户在网页上创建交互式的、可折叠的表格,这对于展示具有层次关系的数据非常有用。 1. **jQuery-treetable的基本概念**: - **TreeNodes**: 树型表格中的每...

    jquery-treetable最简单实例

    上述代码将在页面加载完成后对ID为`myTable`的表格应用jQuery Treetable插件,并启用展开功能。现在,只需运行这个HTML文件,你就可以看到一个简单的树形表格,点击表头可以展开或折叠节点。 值得注意的是,jQuery ...

    jquery.treetable.js

    jquery.treetable,.js下载.基于jquery的表格插件,table,表格,treetable,资源下载

    jquery treetable完美实现可全打开全隐藏

    **jQuery TreeTable 知识详解** `jQuery TreeTable` 是一个强大的JavaScript库,它将HTML表格转换为可展开和折叠的树形结构。这个库基于jQuery框架,使得在Web应用中展示层次化数据变得简单易行。在"jquery ...

    jquery-treetable-master

    jQuery TreeTable是一款基于JavaScript的插件,它将表格和树状结构相结合,提供了强大的功能,使得用户可以方便地在网页上展示层次化的数据。 一、jQuery TreeTable介绍 jQuery TreeTable是由Mario Heiderich开发...

    jqueryTreeTable+ajax(构建树形表格)

    本教程将详细讲解如何利用jQuery TreeTable插件结合AJAX和MySQL数据库,以及Spring、SpringMVC(SSM)架构来创建一个动态的树形表格。 **一、jQuery TreeTable介绍** jQuery TreeTable是一款轻量级的JavaScript...

    ludo-jquery-treetable

    ludo-jquery-treetable是基于jQuery的一个轻量级插件,它为HTML表格提供了强大的树形结构支持。通过将普通的HTML表格转换为树形表格,ludo-jquery-treetable使得数据的层级关系更加清晰,便于用户浏览和操作。该插件...

    jquery treetable树形表格菜单插件

    《jQuery Treetable:构建灵活的树形表格菜单插件》 在Web开发中,数据的展示形式多种多样,其中树形结构与表格结合的展现方式尤其受到青睐,因为它能够清晰地展示层次关系且便于操作。jQuery Treetable是一款优秀...

    jQuerytreeTable在表格内显示树状结果的jQuery插件

    jQuery TreeTable是一款强大的jQuery插件,它允许在HTML表格中展示层次化的数据,形如树状结构。这个插件的设计目标是将普通的二维表格转换为交互式的、具有折叠和展开功能的树形视图,从而使得复杂的数据组织更加...

Global site tag (gtag.js) - Google Analytics