jQuery CSS3セレクターでストライプテーブルを作成

ストライプテーブルとは、1行(列)おきに色づけしたテーブルのこと。
偶数行(列)と奇数行(列)に、それぞれ別の背景色を設定することで、テーブルが見やすくなります。

テーブルのHTMLは以下とします。

<table>
	<tr>
		<th>no</th>
		<th>Name</th>
		<th>Birthday</th>
	</tr>
	<tr>
		<td>1</td>
		<td>ジョナサン・ジョースター</td>
		<td>1868-04-04</td>
	</tr>
	<tr>
		<td>2</td>
		<td>ジョセフ・ジョースター</td>
		<td>1920-09-27</td>
	</tr>
	<tr>
		<td>3</td>
		<td>ジョルノ・ジョバーナ</td>
		<td>1985-04-16</td>
	</tr>
	<tr>
		<td>4</td>
		<td>ロバート・E・O・スピードワゴン</td>
		<td>1863-10-16</td>
	</tr>
	<tr>
		<td>5</td>
		<td>ウィル・A・ツェペリ</td>
		<td>1838-01-19</td>
	</tr>
</table>

CSS3で実装(IE非対応)

CSS2.1で作成しようとすると手間がかかりますが、CSS3なら簡単です。
CSS3セレクターは、:nth-child(even) で偶数の要素に、:nth-child(odd) で奇数の要素に対してスタイルを適用します。サンプルでは、tr:nth-child(even) で、偶数のtr要素に背景色を設定しています。

tr:nth-child(even) {
	background:#F2F2F2;
}

簡単ですね!
これで、めでたし、めでたし(^^)
と、言いたいところですが、なんと、IEだけがCSS3のほとんどの機能に対応していないのです。。
いまだ最大のシェアを握るIEだけがッ!!

HTML5 & CSS3 対応表
日本のバージョン別ブラウザシェア

IEって…とことんク○ですね。。
そこで!jQueryの登場です。jQueryはCSS3セレクターの多くをサポートしており、IE8はもちろん、IE7、IE6にも対応していますので、結果的にIEでもCSS3セレクターを使えるようになります。ステキですね!

jQueryで実装

th, td {
	padding: 5px;
}
th {
	background: #D3DCE3;
}
.even {
	background: #F2F2F2;
}
$(function() {
	$("tr:nth-child(even)").addClass("even");
});

addClass() を使って、偶数行のtr要素に、Class属性を追加しています。
これなら、テーブルの行や列がいくら増えても、ストライプテーブルを維持できます。

マウスオーバーでハイライト表示

$(function() {
	$("tr:nth-child(even)").addClass("even");
	$("tr:not(:first-child)").mouseover(function() {
		$(this).addClass("hover");
	}).mouseout(function() {
		$(this).removeClass("hover");
	})
});

CSSに以下を追加

.hover {
	background: #D0E8FF;
}

tr:not(:first-child) で、1行目(見出し)以外のtr要素を指定して、mouseover() で「hover」というClass属性を追加、mouseout() でClass属性を取り除きます。

列もストライプ&ハイライト(おまけ)

$(function() {
	$("th:nth-child(odd)").addClass("odd");
	$("tr:nth-child(even)").addClass("even");
	$("tr:not(:first-child)").mouseover(function() {
		$(this).addClass("hover");
	}).mouseout(function() {
		$(this).removeClass("hover");
	})
	$("td").mouseover(function() {
		$("td:nth-child("+($("td").index(this)%$("th").size()+1)+")").addClass("hover");
	}).mouseout(function() {
		$("td:nth-child("+($("td").index(this)%$("th").size()+1)+")").removeClass("hover");
	});
});
th, td {
	padding: 5px;
}
th {
	background: #D3DCE3;
}
.odd {
	background: #B1C0CD;
}
.even {
	background: #F2F2F2;
}
.hover {
	background: #D0E8FF;
}

で、こうなります。

コメントを残す