`
sbpya
  • 浏览: 610004 次
  • 性别: Icon_minigender_1
  • 来自: 杭州,长沙
社区版块
存档分类
最新评论

树型对象的table展现形式思考

阅读更多


如图所示:近日项目中需要将一个动态树型结构以表格动态合并行形式实现,目前的实现方式是通过后台输出tr,td,总感觉不是很好,我想请教一下,是否有这种已经做好的通用转换jar包或是js包,通过传入一个tree对象,可以转换成页面table形式呢?

目前这个tree对象从后台递归查询出来,各节点可提供以下几个属性:
1,ifLeaf: 0 分项 1 细则
2,colspan: 当前节点需要合并的列数
3,rowspan: 当前节点需要合并的行数

对于分项,colspan总是为1,rowspan需要动态统计;对于细则,colspan需要动态统计,rowspan总是为1

这个是可以通过一个sql递归查询一次性获得。


SELECT RULE_ID,
       PARENT_ID,
       RULE_CONTENT,
       HIGH_SCORE,
       LOWER_SCORE,
       LEVEL_SCORE,
       IS_LOW_RULE,
       INIT_SCORE,
       CASE WHEN IS_LOW_RULE = 1 THEN 1 ELSE
            (SELECT COUNT(*)
            FROM BE_T_EVA_RULES
           WHERE IS_VALID = 1 AND IS_LOW_RULE = 1
             AND MODEL_ID = $value$
           START WITH PARENT_ID = ber.RULE_ID
          CONNECT BY PRIOR RULE_ID = PARENT_ID)
       END AS ROWSPAN,
       CASE WHEN IS_LOW_RULE = 0 THEN 1 ELSE
          (SELECT MAX(LEVEL)
            FROM BE_T_EVA_RULES
           WHERE IS_VALID = 1
             AND MODEL_ID = $value$
           START WITH PARENT_ID = 0
          CONNECT BY PRIOR RULE_ID = PARENT_ID) - LEVEL+1
       END AS COLSPAN
        FROM BE_T_EVA_RULES ber
         WHERE IS_VALID = 1
           AND MODEL_ID = $value$           
         START WITH PARENT_ID = 0
        CONNECT BY PRIOR RULE_ID = PARENT_ID
         ORDER SIBLINGS BY IS_LOW_RULE, ORDER_ID, RULE_ID

在这里,主要请教一下使用JS,能否根据这样一个tree对象,封装成一个通用js,在页面调用一下,就能立即展现的JS通用包。

以下是该页面解析后源代码,配合找出规律
<table width="444" border="1" bordercolor="#0033FF">
  <tr>
    <td width="91" rowspan="11"><strong>分项一</strong></td>
    <td width="95" rowspan="5"><strong>分项一一</strong></td>
    <td width="107" rowspan="2"><strong>分项一一一</strong></td>
    <td width="123">细则一一一一</td>
  </tr>
  <tr>
    <td>细则一一一二</td>
  </tr>
  <tr>
    <td colspan="2">细则一一一</td>
  </tr>
  <tr>
    <td colspan="2">细则一一二</td>
  </tr>
  <tr>
    <td colspan="2">细则一一三</td>
  </tr>
  <tr>
    <td rowspan="2"><strong>分项一二</strong></td>
    <td colspan="2">细则一二一</td>
  </tr>
  <tr>
    <td colspan="2">细则一二二</td>
  </tr>
  <tr>
    <td colspan="3">细则一一</td>
  </tr>
  <tr>
    <td colspan="3">细则一二</td>
  </tr>
  <tr>
    <td colspan="3">细则一三</td>
  </tr>
  <tr>
    <td colspan="3">细则一四</td>
  </tr>
  <tr>
    <td colspan="4">细则一</td>
  </tr>
  <tr>
    <td colspan="4">细则二</td>
  </tr>
</table>

根据上面的sql语句查询出来的结果帖图如下,其排序正好与源代码中画tr,td的顺序完全一致



现将如何在页面迭代输出,并动态合并行列代码贴上:

<table align="center" width="100%" border="2">
                <thead>
                <tr>
                    <th colspan="<s:property value='#request.maxColNum'/>">细则名称</th>
                </tr>
                </thead>
                <tbody>
                <s:if test="#request.evaRuleses != null && 0 != #request.evaRuleses.size()">
                    <s:set name="preErType" value="-1"/>
                    <s:iterator value="#request.evaRuleses" id="er" status="stuts">                       
                        <s:if test="0 eq rowspan"></s:if>
                        <s:elseif test="-1 == #preErType">
                        <tr>
                            <td colspan="<s:property value='colspan'/>" rowspan="<s:property value='rowspan'/>"><s:property value="ruleContent"/></td>
                            <s:set name="preErType" value="isLowRule"/>
                        </s:elseif>
                        <s:elseif test="0 == #preErType">
                            <td colspan="<s:property value='colspan'/>" rowspan="<s:property value='rowspan'/>"><s:property value="ruleContent"/></td>
                            <s:set name="preErType" value="isLowRule"/>
                        </s:elseif>
                         <s:elseif test="1 == #preErType">
                            </tr>
                             <tr>
                            <td colspan="<s:property value='colspan'/>" rowspan="<s:property value='rowspan'/>"><s:property value="ruleContent"/></td>
                             <s:set name="preErType" value="isLowRule"/>
                         </s:elseif>
                    </s:iterator>
                       </tr>
                </s:if>
                <s:else>
                    <tr class="rowOdd" onMouseOver="this.className='rowHover'" onMouseOut="this.className='rowOdd'">
                        <td colspan="6" align="center"> 对不起,该模板没有细则内容!</td>
                    </tr>
                </s:else>
                </tbody>
            </table>

浏览器根据上面代码解析后效果如下:



此方法不适应于存在空枝点的情形,如有需要,请自行修正!
  • 大小: 30.4 KB
  • 大小: 97.1 KB
  • 大小: 13.3 KB
分享到:
评论
2 楼 iaimstar 2009-10-20  
我一看见树就有想死的冲动
1 楼 抛出异常的爱 2009-10-20  
我的项目里有人曾
横向的合并格子
用jquery找到要删除td
在前一个兄弟的rowspan加一就哆了

侧面的没作过.

可以自己写一个.
只要不是通用的
难度不是很大.

相关推荐

    树型论坛树型论坛树型论坛

    树型论坛树型论坛树型论坛树型论坛树树型论坛型论坛树型论坛

    js做的树型结构javascript作的树型结构javascript作的树型结构

    js做的树型结构,应该是很好的,javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型结构javascript作的树型...

    datawindow树型控件.rar

    DataWindow树型控件是一种特殊的控件,它允许数据以层次结构的形式展现,类似于Windows操作系统中的文件系统浏览器。这种控件对于显示具有层级关系的数据非常有用,例如部门结构、产品目录或组织架构。 2. **TREE_...

    js简单树型表格控件

    在JavaScript开发中,树型表格控件是一种常见且实用的元素,它允许用户以树状结构展示数据,常用于组织层次分明的数据,如目录结构、组织架构或分类信息。本项目是一个简单的JS实现的树型表格控件,适用于快速原型...

    变色的树型控件 变色的树型控件 变色的树型控件

    在IT领域,树型控件(Tree View Control)是一种常见的用户界面元素,广泛应用于各种操作系统和应用程序中。这种控件以树状结构显示数据,通常包含可展开/折叠的节点,便于用户浏览和操作层次化的信息。在"变色的...

    树型结构算法

    树型结构算法树型结构算法树型结构算法树型结构算法

    树型自动机经典理论书籍

    ### 知识点总结:《树型自动机技术与应用》——树型自动机的经典理论书籍 #### 一、引言 《树型自动机技术与应用》是一本由多位国际知名学者共同编写的经典著作,它深入探讨了树型自动机的基础理论和技术应用。...

    jquery树型

    树型结构通常用于展现层次化信息,如文件系统、组织结构或导航菜单。在网页应用中,它可以帮助用户更直观地理解和操作复杂的数据关系。 首先,创建一个jQuery树型结构的基本步骤包括以下几个方面: 1. **HTML结构*...

    易语言树型框扩充

    通过这个易语言树型框扩充源码,开发者不仅可以掌握树型框的基本操作,还能学习到如何利用源码扩展提高开发效率,理解面向对象编程的思想,以及如何设计和实现高效的算法来处理复杂的数据结构。对于想要深入学习...

    精美的ajax树型菜单

    AJAX的核心是JavaScript对象XMLHttpRequest,它允许前端向服务器发送请求并接收响应,而无需刷新整个页面。通过AJAX,开发者可以创建更高效、更快速、更具互动性的Web应用。 【标签】"树型菜单" 是一种常见的网页...

    Javascript树型菜单

    8. **数据结构与交互**:在实际实现中,树型菜单的数据结构可能是JSON对象或XML,其中包含节点信息(如ID、文本、子节点数组等)。JavaScript代码负责解析这些数据并构建DOM元素,同时监听事件以响应用户的展开、...

    delphi 树型控件自动根据数据集生成树型结构

    节点可以通过 TreeNode 对象进行操作,包括添加、删除和修改。 要自动根据数据集生成树型结构,你需要遵循以下步骤: 1. **连接数据源**:首先,创建一个数据集,如 TClientDataset 或 TTable,用来存储你的层次化...

    Bootstrap树型表格和多标题表格

    在Bootstrap中,表格(Table)是常见的数据展示方式,但默认的表格功能较为基础,不支持复杂的布局和交互。针对这一需求,开发者们创建了各种插件来增强Bootstrap表格的功能,比如“Bootstrap树型表格和多标题表格”...

    vc++树型列表控件

    其中,树型列表控件是一种常用且功能强大的控件,它能够以层级结构展示数据,便于用户浏览和操作。然而,VC++的标准控件库MFC(Microsoft Foundation Classes)中的CListCtrl类默认并不支持树型元素的显示。为了实现...

    java 树型菜单建立

    在Java编程中,树型菜单是一种常见的用户界面元素,它以层次结构展示数据,便于用户进行导航和操作。本文将详细讲解如何使用Java来构建一个动态的、可交互的树型菜单,包括从数据库获取数据、创建树节点、实现添加和...

    超酷多种风格树型菜单效果

    它以节点和分支的形式呈现,用户可以通过展开和折叠节点来查看或隐藏子级菜单。这种菜单设计能够帮助用户快速理解和探索多层关系,尤其适用于大型网站和应用程序的导航系统。 “超酷”一词意味着这些树型菜单在视觉...

    简单好用的JS树型菜单

    同时,为了保持状态的一致性,还需要维护一个数据结构(如JSON对象)来存储树的状态。 在“简单好用的JS树型菜单”中,设计的核心在于实现以下功能: 1. **节点展开与折叠**:当用户点击节点时,通过JavaScript...

    pw7.3.2树型论坛

    "pw7.3.2树型论坛"是一个特定版本的在线社区平台,它采用了独特的树状结构来组织讨论和信息。这种设计使得论坛的内容能够以更直观、有层次的方式呈现,便于用户查找和参与对话。下面我们将深入探讨树型论坛的特点、...

    易语言树型框全操作.rar

    1. 创建与初始化:在易语言中创建树型框,首先要声明一个树型框对象,并进行初始化设置,如设定初始显示的节点、是否允许多选、是否显示复选框等属性。 2. 添加与删除节点:在程序运行过程中,可以动态添加或删除...

    树型论坛,全静态asp免费树型论坛程序

    树型论坛下载-买料卖料论坛源码-php最新版树型论坛源码-全静态树型论坛程序-网投源码-网投程序-股票程序源码-手机注册程序源码-会员取料系统程序源码 演示地址:http://www.006670.com

Global site tag (gtag.js) - Google Analytics