如何在displaytag中设置行id [TR]和列id [TD]?

时间:2009-09-29 10:42:55

标签: javascript html jsp displaytag

我使用Displaytag显示DataGrid。现在,我必须根据一些计算更改行的颜色。喜欢如果

column3 + column4的值> coulmn5然后行颜色应为黄色

column3 + column4的值< coulmn5然后行颜色应为红色

column3 + column4 = coulmn5的值,则行颜色应为白色

我认为唯一的方法是使用 getElementByID()方法

注意:我不想使用getElementsByTagName()[index]来考虑解决方案,因为稍后列排序可能会发生变化。

目前我正在使用以下代码,我想更改。

var rows = tbody.getElementsByTagName("tr");

迭代行Object

var tdObj = rows[i].getElementsByTagName("td")[3]  

2 个答案:

答案 0 :(得分:4)

首先,我不相信可以在不修改源代码的情况下在displaytag中设置td或tr的ID。这还没有留下我要做的事情清单,但现在我有一个解决方法。

而不是定义你的表:

<display:table id='row' name="..." export="true" requestURI="">
  <display:column property="usefulData" title="Useful data" sortable="true" />
  ... more columns ...
</display:table>

这样做:

<display:table id='row' name="..." export="true" requestURI="">
  <display:column title="Useful data" sortable="true" >
    <span id='${row.usefulData}' class='css_class_selector'>${row.usefulData}</span>
  </display:column>
</display:table>

请注意包装打印数据的范围。现在您可以选择与表内打印相关的数据,这可能就是您想要的;选择你的数据,而不是专门选择td和tr。

答案 1 :(得分:2)

id是一种方法。另一种方法是在每个td上设置一个类(这样你就可以在每一行上重复使用相同的类)。然后,您将遍历单元格,查找具有正确className的单元格。如果愿意,可以将它抽象为getElementsByClassName函数。

使用较少的标记来实现它的方法是保持列到索引的查找并使用它来获取列号而不是遍历每行上的单元格。您可以从标题或col元素的类中获取此信息。例如:

<script type="text/javascript">
    function check(table) {
        // Work out which column is at which index
        //
        var columns= {};
        var ths= table.tHead.rows[0].cells;
        for (var i= ths.length; i-->0;)
            if (ths[i].className.indexOf('column-')==0)
                columns[ths[i].className.substring(7)]= i;

        // Check each row
        //
        var rows= table.tBodies[0].rows;
        for (var i= rows.length; i-->0;) {
            var cells= rows[i].cells;
            var a= +cells[columns.a].innerHTML;
            var b= +cells[columns.b].innerHTML;
            var sum= +cells[columns.sum].innerHTML;
            var right= a+b==sum;
            rows[i].className= right? 'right' : 'wrong';
        }
    }
</script>

<style>
    .right { background: green; }
    .wrong { background: red; }
</style>

<table id="t">
    <thead>
        <tr>
            <th class="column-a">A</th>
            <th class="column-b">B</th>
            <th class="column-sum">Sum</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
        </tr>
        <tr>
            <td>4</td>
            <td>5</td>
            <td>6</td>
        </tr>
    </tbody>
</table>

<button onclick="check(document.getElementById('t'));">Check</button>

注意使用innerHTML来获取文本内容有点顽皮,但它适用于数字,因为它们不能包含HTML特殊字符。对于任意文本,您需要一个提取文本内容函数。

使用rows / cells优于getElementsByTagName。它更快,更容易阅读,您不必担心嵌套表。