【问题标题】:How to alternate HTML table row colors using JSP?如何使用 JSP 交替 HTML 表格行颜色?
【发布时间】:2010-09-19 12:08:03
【问题描述】:

如何使用 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>

我需要一个整数计数变量或布尔奇数/偶数变量来跟踪行。然后我的&lt;tr&gt; 标签看起来像:

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

【问题讨论】:

    标签: html css jsp jstl


    【解决方案1】:

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

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

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

    【讨论】:

    • 我真的在寻找如何在不使用 标签的情况下声明计数器变量的 JSP 语法
    【解决方案2】:

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

    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>
    

    【讨论】:

      【解决方案3】:

      forEach 标记上使用varStatus 属性,JSTL 将在您指定的变量名中为您管理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 primer 包含有关 core 标记库及其为您提供的更多信息。

      【讨论】:

        【解决方案4】:

        如果您愿意在客户端实现这一点,您可以使用 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

        【讨论】:

          【解决方案5】:

          (这个答案只适用于 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}
          

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

          【讨论】:

            【解决方案6】:

            这样做就可以了:

            table tr:nth-child(odd) { background-color: #ccc; }
            

            【讨论】:

            • 注意:仅适用于支持 CSS3 的浏览器(因此不适用于 IE8 和更早版本)。
            • 2019年更好的解决方案。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-08-24
            • 2011-05-02
            • 2022-10-05
            • 1970-01-01
            • 2012-04-18
            • 2017-07-07
            • 2016-07-08
            相关资源
            最近更新 更多