29

如何使用 JSP 替换 HTML 表格行颜色?

我的 CSS 看起来像:

tr.odd {background-color: #EEDDEE}
tr.even {background-color: #EEEEDD}

我想用来<c:forEach>迭代一个集合。

<c:forEach items="${element}" var="myCollection">
  <tr>
    <td><c:out value="${element.field}"/></td>
    ...
  </tr>
</c:forEach>

我需要一个 int 计数变量或布尔奇数/偶数变量来跟踪行。然后我的<tr>标签看起来像:

<tr class="odd or even depending on the row">
4

6 回答 6

89

在您的标签上使用该varStatus属性,JSTL 将在您指定的变量名称中为您forEach管理一个实例。javax.servlet.jsp.jstl.core.LoopTagStatus

然后,您可以使用三元运算符轻松输出适当的类名:

<c:forEach items="${element}" var="myCollection" varStatus="loopStatus">
  <tr class="${loopStatus.index % 2 == 0 ? 'even' : 'odd'}">
    ...
  </tr>
</c:forEach>

这本来自 IBM 的JSTL 入门提供了有关core标记库及其提供给您的更多信息。

于 2008-10-28T01:12:51.143 回答
3

就这样做,就可以工作了:

table tr:nth-child(odd) { background-color: #ccc; }
于 2011-09-29T08:32:29.970 回答
2

如果您愿意在客户端实现这一点,您可以使用 JQuery 进行 Zebra Striping。

只需几行代码即可完成,但您必须在文件中包含 jquery 库。

http://docs.jquery.com/Tutorials:Zebra_Striping_Made_Easy

http://docs.jquery.com/Selectors/odd

http://docs.jquery.com/Selectors/even

于 2008-10-28T01:31:25.693 回答
2

(这个答案只适用于 CSS 方面......)

当然,我总是像这样针对儿童TD:

tr.odd td {}
tr.even td {}

原因是 IE 实际上通过删除 TR 上设置的值并将其应用于该 TR 中的每个单独的 TD 来应用 TR 背景颜色。有时你可能有一个 css 重置或其他 css 规则覆盖 IE 的奇怪的做 TR 背景颜色的方式,所以这是一种确保你避免这种情况的方法。

此外,您可能需要考虑仅设置

tr td {background-color: #EEDDEE}

tr.odd td {background-color: #EEEEDD}

所以你的代码稍微不那么冗长

于 2008-10-28T01:50:14.517 回答
1

我不使用 JSP,所以我不能用你的语言给你答案,但这就是我所做的(使用伪代码)

counter = 0
foreach (elements)
    counter = counter + 1
    output: <tr class="row{counter % 2}">...</tr>

就个人而言,我将类命名为“row0”和“row1”,这样您就可以通过简单的模数计算在它们之间进行交替,此外,如果您决定让行以三元组或四元组(而不是成对)交替,您可以轻松扩展它,并将您的输出代码更改为row2等。row3counter % 4

于 2008-10-28T01:02:18.543 回答
1

在这种情况下,我使用了三级运算符。它看起来像:

String oddEven="";
<c:forEach items="${element}" var="myCollection">
    oddEven = (oddEven == "even") ? "odd" : "even";
    <tr class='"'+oddEven+'"'>
        <td><c:out value="${element.field}"/></td>
        ...
    </tr>
</c:forEach>
于 2008-10-28T01:08:15.413 回答