本当に長い3列のテーブルがあります。私はしたいと思います
<table>
<tr><td>Column1</td><td>Column2</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
<tr><td>Start</td><td>Hiding</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
<tr><td>End</td><td>Hiding</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
</table>
これは、jQueryを使用して取得しようとしている結果です。
Column1 Column2
Column1 Column2
...Show Full Table...
Column1 Column2
Column1 Column2
JQueryの表示/非表示機能を使用して、テーブルを最小化しますが、上部と下部の行の一部を表示したいと思います。中央の行は「フルテーブルを表示」などのテキストに置き換えてください。クリックすると、最初から最後までフルテーブルが表示されます。
JQueryでこれを行う最良の方法は何ですか?
ところで、私はすでにいくつかの行にクラス「Table_Middle」を追加しようとしましたが、それが占めるスペースがまだ完全に隠されておらず、ユーザーにテーブルを展開する方法を与えるテキストがありません完全に。
[編集] Parandの投稿された回答に触発された実例HTMLを追加しました
以下の例は完全な動作例であり、jqueryをダウンロードする必要さえありません。空のHTMLファイルに貼り付けるだけです。
Javascriptがオフになっている場合、完全なテーブルのみを表示するのは問題ありません。 Javascriptがオンの場合、中央のテーブル行が非表示になり、表示/非表示リンクが追加されます。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Example Show/Hide Middle rows of a table using jQuery</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#HiddenRowsNotice").html("<tr><td colspan='2'> <a href='#'>>> some rows hidden <<</a></td></tr>");
$("#ShowHide").html("<tr><td colspan='2'><a href='#'>show/hide middle rows</a></td></tr>");
$("#HiddenRows").hide();
$('#ShowHide,#HiddenRowsNotice').click( function() {
$('#HiddenRows').toggle();
$('#HiddenRowsNotice').toggle();
});
});
</script>
</head>
<body>
<table>
<tbody id="ShowHide"></tbody>
<tr><th>Month Name</th><th>Month</th></tr>
<tbody>
<tr><td>Jan</td><td>1</td></tr>
</tbody>
<tbody id="HiddenRowsNotice"></tbody>
<tbody id="HiddenRows">
<tr><td>Feb</td><td>2</td></tr>
<tr><td>Mar</td><td>3</td></tr>
<tr><td>Apr</td><td>4</td></tr>
</tbody>
<tbody>
<tr><td>May</td><td>5</td></tr>
</tbody>
</table>
</body>
</html>
[編集]リンク ブログ投稿 と実際の例をリンクします。
このような何かが動作する可能性があります:
<table>
<tbody>
<tr><td>Column1</td><td>Column2</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
<tr class="Show_Rows"><td>Start</td><td>Hiding</td></tr>
</tbody>
<tbody class="Table_Middle" style="display:none">
<tr><td>Column1</td><td>Column2</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
</tbody>
<tbody>
<tr class="Show_Rows"><td>End</td><td>Hiding</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
<tr><td>Column1</td><td>Column2</td></tr>
</tbody>
</table>
$('#something').click( function() {
$('.Table_Middle').hide();
$('.Show_Rows').show();
});
$('.Show_Rows').click( function() {
$('.Show_Rows').hide();
$('.Table_Middle').show();
});
最も簡単な方法は、<tbody>
を追加して行をグループ化し、none
とtable-row-group
を切り替えます(例外をキャッチし、IEの場合はblock
に設定します)。 jqueryに固有にすることについてはわかりませんが、それは物事を行う「通常の」方法です。
余分なマークアップを必要とせず、うまく劣化するソリューションがあります。
<table id="myTable">
<tbody>
<tr><td>Cell</td><td>Cell</td></tr>
<tr><td>Cell</td><td>Cell</td></tr>
<tr><td>Cell</td><td>Cell</td></tr>
<tr><td>Cell</td><td>Cell</td></tr>
<tr><td>Cell</td><td>Cell</td></tr>
</tbody>
</table>
そしてjQuery ...ここでいくつかのことをハードコーディングしました(テーブル識別子、表示する行数など)。これらをテーブルのclass
属性に入れることができます。より再利用可能(例:<table class="hidey_2">
)
var showTopAndBottom = 2,
minRows = 4,
$rows = $('#myTable tr').length),
length = $rows.length
;
if (length > minRows) {
$rows
.slice(showTopAndBottom, length - showTopAndBottom)
.hide()
;
$rows
.eq(showTopAndBottom - 1)
.after(
// this colspan could be worked out by counting the cells in another row
$("<tr><td colspan=\"2\">Show</td></tr>").click(function() {
$(this)
.remove()
.nextAll()
.show()
;
})
)
;
}
Slice()メソッドを使用してみてください:
$("#table tr").slice(1, 4).hide();
真ん中を与えると<tr />
は「Table_Middle
"クラスを使用すると、はるかに簡単になります。その後、jQueryの数行のみを使用します。1つは「フルテーブルの表示」行を追加し、もう1つはその行のクリックリスナーを追加します。colspan
属性の「X」値をテーブルの列数に。
// jQuery chaining is useful here
$(".Table_Middle").hide()
.eq(0)
.before('<tr colspan="X" class="showFull">Show Full Table<tr/>');
$(".showFull").click(function() {
$(this).toggle();
$(".Table_Middle").toggle();
});
これはうまく劣化し、多くのブラウザ/デバイスでアクセスできるため便利です。 JavaScriptがオフになっている場合、またはCSSが無効になっている場合(または、このコードがサポートされない可能性がある他のシナリオ)、「show full table」行はありません。
私はおそらく次のようにします:
<table>
<thead>
<tr>
<th>Col1</th>
<th>Col2</th>
<th>Col3</th>
</tr>
</thead>
<tbody>
<tr>
<td>data1</td>
<td>data1</td>
<td>data1</td>
</tr>
...
</tbody>
<tbody id="hidden-rows">
<tr>
<td colspan="3">
<a href="#" onclick="$('#hidden-rows').hide();$('#extra-rows').show();">
Show hidden rows
</a>
</td>
</tr>
</tbody>
<tbody id="extra-rows" style="display: none;">
<tr>
<td>data1</td>
<td>data1</td>
<td>data1</td>
</tr>
...
</tbody>
<tbody>
<tr>
<td>data1</td>
<td>data1</td>
<td>data1</td>
</tr>
...
</tbody>
</table>
うまく劣化しないので、素晴らしい方法ではありません。
それをうまく劣化させるには、最初にすべての行を表示し、jQueryドキュメント準備関数でそれらを非表示にし、リンクを含む行を作成する必要があります。
また、特定のクラスを非表示にする行を指定する方法も機能するはずです。 jQueryは次のようになります。
$(document).ready(function() {
$('tr.Table_Middle').hide();
});
ただし、それらを再表示するには、リンクを含む行を作成する必要があります。