Подтвердить что ты не робот

Как чередовать цвета строк таблицы HTML с помощью JSP?

Как изменить цвета строк таблицы HTML с помощью JSP?

Мой 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 count или логическая нечетная/четная переменная для отслеживания строки. Тогда мой тег <tr> будет выглядеть примерно так:

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

Ответ 1

Используйте атрибут varStatus в тэге forEach, а 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>

Этот JSTL-праймер от IBM содержит больше информации о библиотеке тегов core и том, что он вам дает.

Ответ 2

Если вы готовы сделать это на стороне клиента, вы можете сделать Zebra Striping с помощью JQuery.

Это будет сделано только с несколькими строками кода, но вам нужно будет включить библиотеку jquery в ваш файл.

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

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

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

Ответ 3

(этот ответ относится только к стороне CSS)...

Разумеется, я всегда нацеливаю дочерний TD следующим образом:

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

Причина в том, что IE фактически применяет фоновый цвет TR, удаляя значение, установленное на TR, и применяя его к каждому отдельному TD внутри этого TR. Иногда у вас может быть css reset или другие правила css, которые переопределяют IE странным способом выполнения фонового цвета TR, поэтому это способ убедиться в этом.

Кроме того, вы можете рассмотреть возможность установки только

tr td {background-color: #EEDDEE}

и

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

поэтому ваш код немного менее подробный

Ответ 4

Я не использую JSP, поэтому я не могу дать вам ответ на вашем языке, но вот что я делаю (используя псевдокод)

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

Лично я называю классы "row0" и "row1", которые позволяют вам чередовать их с помощью простого вычисления модуля, также, если вы решите, что строки чередуются в тройках или квадах (вместо пар), вы можете легко распространите его на row2, row3 и измените код вывода на counter % 4 и т.д.

Ответ 5

Я использовал третичный оператор в таких случаях. Это выглядело бы так:

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>

Ответ 6

Просто сделайте это и сработает:

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