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>
行を追跡するには、整数カウント変数またはブールの奇数/偶数変数が必要です。すると、<tr>
タグは次のようになります。
<tr class="odd or even depending on the row">
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>
IBMのこの JSTL入門 には、core
タグライブラリとそれが提供するものに関する詳細情報があります。
このようにして動作します:
table tr:nth-child(odd) { background-color: #ccc; }
これをクライアント側で実行したい場合は、JQueryでZebra Stripingを実行できます。
これは数行のコードで実行できますが、jqueryライブラリをファイルに含める必要があります。
http://docs.jquery.com/Tutorials:Zebra_Striping_Made_Easy
(この答えはCSS側のみに関係します...)
もちろん、私は常に子TDをターゲットにしています。
tr.odd td {}
tr.even td {}
その理由は、IEは、TRに設定された値を削除してTRの背景色を実際に適用し、それをそのTR内の個々のTDに適用することです。 CSSリセットまたはIEのTRの背景色の奇妙な方法をオーバーライドする他のCSSルールがある可能性があるため、これはそれを確実に回避する方法です。
また、設定だけを検討することもできます
tr td {background-color: #EEDDEE}
そして
tr.odd td {background-color: #EEEEDD}
あなたのコードは少し冗長ではありません
このような場合に三項演算子を使用しました。それは次のようになります:
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>
私はJSPを使用していないので、あなたの言語で答えを出すことはできませんが、これが(疑似コードを使用して)行うことです
counter = 0
foreach (elements)
counter = counter + 1
output: <tr class="row{counter % 2}">...</tr>
個人的には、クラスに「row0」と「row1」という名前を付けます。これにより、単純なモジュラス計算でクラスを交互に切り替えることができます。また、行を(ペアではなく)トリプルまたはクワッドに交互にする場合は、簡単に拡張できます。 row2
、row3
に変更し、出力コードをcounter % 4
などに変更します。