現代專案首選純 CSS,無需 JavaScript,效能最佳:
<style>
.repeater-table tr:nth-child(even) { background-color: #fcf3f4; }
.repeater-table tr:nth-child(odd) { background-color: #ffffff; }
.repeater-table tr:hover { background-color: #b9bace; }
</style>
<asp:Repeater ID="rptData" runat="server">
<HeaderTemplate><table class="repeater-table"></HeaderTemplate>
<ItemTemplate>
<tr><td><%# Eval("Name") %></td></tr>
</ItemTemplate>
<FooterTemplate></table></FooterTemplate>
</asp:Repeater>
若需支援 IE8 以下,可採用原文的隱藏欄位暫存原色方案:
<tr class="list_L01"
style='background-color: <%# (Container.ItemIndex % 2 == 0) ? "#FFFFFF" : "#fcf3f4" %>'
onmouseover="changeColorOver(this)"
onmouseout="changeColorOut(this)">
<td><%# Eval("Name") %></td>
</tr>
<input type="hidden" id="colorStore" />
<script>
function changeColorOver(el) {
document.getElementById('colorStore').value = el.style.backgroundColor;
el.style.backgroundColor = '#b9bace';
}
function changeColorOut(el) {
el.style.backgroundColor = document.getElementById('colorStore').value;
}
</script>
在 ItemDataBound 事件動態加入 CSS 類別,邏輯集中於後端:
protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e) {
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
var row = (HtmlTableRow)e.Item.FindControl("trRow");
row.Attributes["class"] = e.Item.ItemIndex % 2 == 0 ? "even-row" : "odd-row";
row.Attributes["onmouseover"] = "this.className+=' hover-row';";
row.Attributes["onmouseout"] = "this.className=this.className.replace(' hover-row','');";
}
}
:nth-child + :hoverstyle 屬性硬編碼顏色,改用 CSS 類別便於維護