繁体   English   中英

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

[英]How to set the row id [ TR ] and column id [ TD] in 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]  

首先,我不相信可以在不修改源的情况下在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。

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特殊字符。 对于任意文本,您需要一个extract-text-content函数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM