ただし、これと同様の構造の HTML テーブルがあります。
- 行スパンは固定サイズではありません
- 特定のテーブルに複数の行スパンが存在する場合があります (それぞれの長さが異なる場合があります)。
- テーブルが生成されます
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td>
<label for="searchbox">Search:</label>
<input type="text" id="filter1" />
</td>
</tr>
</tbody>
</table>
<table id="foo" border="1px">
<tr>
<th>A</th>
<th>B</th>
<th>C</th>
<th>D</th>
<th>E</th>
</tr>
<tbody id="data">
<tr>
<td class="col1" rowspan="2">1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
</tr>
<tr>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
</tr>
<tr>
<td class="col1">v</td>
<td>w</td>
<td>x</td>
<td>y</td>
<td>z</td>
</tr>
</table>
検索は最初の列を使用して行われます。以下で説明するこの検索/フィルター機能を使用すると、rowspan で問題が発生します。
<script language="javascript" type="text/javascript">
$(function() {
$('#filter1').change(function() {
$("#foo td.col1:contains('" + $(this).val() + "')").parent().show();
$("#foo td.col1:not(:contains('" + $(this).val() + "'))").parent().hide();
});
});
</script>
問題は、 '1'からすべての行を非表示にする検索語を入力する場合( 'v' の検索など) です。rowspan の最初の行のみが非表示になり、rowspan の後続の行部分はすべて残ります。したがって、行 [6,7,8,9] は常に残ります。
表の例:
[1 - 2,3,4,5] [ - 6,7,8,9] [v - w,x,y,z]
' 1 ' を検索中(正しい):
[1 - 2,3,4,5] [ - 6,7,8,9]
' v ' の検索(不正解):
[ - 6,7,8,9] <- this row should not be returned [v - w,x,y,z]
これらのサブ行スパンを適切に非表示にするにはどうすればよいですか?
更新: 解決策は、行スパン数に応じて異なるクラスを追加し、適切な数の .parent().next(i).hide() でこれらのクラスを異なる方法で処理する関数を用意することだと思います-私はそうではありませんこれを行う方法と、このアプローチが正しいかどうかを確認してください。