How to alternate HTML table row colors using JSP?

2019-01-14 10:57发布

How do I alternate HTML table row colors using JSP?

My CSS looks something like:

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

I want to use <c:forEach> to iterate over a collection.

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

I need an int count variable or boolean odd/even variable to track the row. Then my <tr> tag would look something like:

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

标签: html css jsp jstl
6条回答
三岁会撩人
2楼-- · 2019-01-14 11:25

I've used a tertiary operator in cases like this. It would look something like:

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>
查看更多
beautiful°
3楼-- · 2019-01-14 11:26

If you are willing to make this happen on the client side, you can do Zebra Striping with JQuery.

It would be done with just a couple lines of code, but you would have to include the jquery library in your file.

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

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

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

查看更多
Luminary・发光体
4楼-- · 2019-01-14 11:29

(this answer only pertains to the CSS side of things...)

As a matter of course, I always target the child TD's like so:

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

The reason being is that IE actually applies TR background-color by removing the value set on the TR and applying it to each individual TD within that TR. Sometimes you might have a css reset or other css rules that overrides IE's strange way of doing TR background-color, so this is a way to make sure you avoid that.

Also, you might want to consider setting just

tr td {background-color: #EEDDEE}

and

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

so your code is slightly less verbose

查看更多
祖国的老花朵
5楼-- · 2019-01-14 11:35

I don't use JSP, so I can't give you an answer in your language, but here's what I do (using pseudo code)

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

Personally, I name the classes "row0" and "row1", which lets you alternate between them with a simple modulus calculation, also, if you decide to have rows alternating in triples or quads (instead of pairs), you can easily extend it to row2, row3 and change your output code to be counter % 4, etc.

查看更多
仙女界的扛把子
6楼-- · 2019-01-14 11:36

Just do like this and is going to work:

table tr:nth-child(odd) { background-color: #ccc; }
查看更多
Rolldiameter
7楼-- · 2019-01-14 11:44

Use the varStatus attribute on your forEach tag and JSTL will manage an instance of a javax.servlet.jsp.jstl.core.LoopTagStatus for you in the variable name you specify.

You can then use a ternary operator to easily output the appropriate class name:

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

This JSTL primer from IBM has more information about the core tag library and what it gives you.

查看更多
登录 后发表回答