ksino's diary

覚えたことを忘れないように、小さなことでも書いていく。

1データが複数行で構成されたテーブルで1データを選択する

やりたいこと

以下のようなテーブルで、0〜2行目をクリックした場合は0〜2行めを着色、3〜4行目をクリックした場合は3〜4行目を着色…したい。

0 aaa aaa
1 aaa aaa
2 aaa aaa
3 bbb bbb
4 bbb bbb
5 ccc ccc
6 ddd ddd
7 ddd ddd

コード

あまりかっこよくないですが、これでいけました。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<script>
function handler(e) {
	// 全行の色を戻す
	var allRows = document.getElementById('table').rows;
	for (var row of allRows) {
		row.style.backgroundColor = 'white';
	}

	// 選択された行と同じデータを着色
	var name = e.target.parentNode.getAttribute('name');
	var selectedRows = document.getElementsByName(name);
	for (var row of selectedRows) {
		row.style.backgroundColor = 'lightblue';
	}
}
</script>
	</head>
	<body>
		<table id="table" border="1">
			<tr name="data_a" onClick="handler(event)">
				<th>0</th><td>aaa</td><td>aaa</td>
			</tr>
			<tr name="data_a" onClick="handler(event)">
				<th>1</th><td>aaa</td><td>aaa</td>
			</tr>
			<tr name="data_a" onClick="handler(event)">
				<th>2</th><td>aaa</td><td>aaa</td>
			</tr>
			<tr name="data_b" onClick="handler(event)">
				<th>3</th><td>bbb</td><td>bbb</td>
			</tr>
			<tr name="data_b" onClick="handler(event)">
				<th>4</th><td>bbb</td><td>bbb</td>
			</tr>
			<tr name="data_c" onClick="handler(event)">
				<th>5</th><td>ccc</td><td>ccc</td>
			</tr>
			<tr name="data_d" onClick="handler(event)">
				<th>6</th><td>ddd</td><td>ddd</td>
			</tr>
			<tr name="data_d" onClick="handler(event)">
				<th>7</th><td>ddd</td><td>ddd</td>
			</tr>
		</table>
	</body>
</html>

実行結果

3行目、または4行目をクリック

f:id:ksino:20160912233609p:plain

5行目をクリック

f:id:ksino:20160912233619p:plain