jQueryでHTMLテーブルをカンタンソート!初心者でも安心の基本手順と便利プラグイン「tablesorter」
jQueryを使ってHTMLテーブルをソートする方法
基本的な手順
HTMLテーブルに適切な構造を
ソート機能を適用するには、テーブルに
<thead>
と<tbody>
タグを含める必要があります。<thead>
タグには、ソート対象となる列のヘッダーを配置します。<table> <thead> <tr> <th>名前</th> <th>年齢</th> <th>性別</th> </tr> </thead> <tbody> <tr> <td>田中 太郎</td> <td>35</td> <td>男性</td> </tr> <tr> <td>佐藤 花子</td> <td>28</td> <td>女性</td> </tr> <tr> <td>鈴木一郎</td> <td>42</td> <td>男性</td> </tr> </tbody> </table>
jQueryライブラリをを読み込む
<head>
セクションに、jQueryライブラリの<script>
タグを追加します。<head> <script src="https://releases.jquery.com/"></script> </head>
jQueryでソート処理を実行
以下のスクリプトを
<script>
タグ内に記述し、ソート対象のテーブルを指定します。$(document).ready(function(){ $("table").tablesorter(); });
このスクリプトは、テーブル内のすべての列を昇順でソートします。列ヘッダーをクリックすると、昇順と降順の切り替えが可能です。
tablesorterプラグインを使う
tablesorterは、jQuery用のテーブルソートプラグインで、より高度なソート機能を提供します。主な機能は以下の通りです。
- 複数の列によるソート
- カスタマイズ可能なソート順序
- 数値、文字列、日付など、様々なデータタイプのソート
- ソートアイコンの表示
- フィルタ機能
tablesorterを使うには、以下の手順に従います。
tablesorter.jsとtablesorter.cssを読み込む
ダウンロードしたライブラリの
tablesorter.js
とtablesorter.css
ファイルを、HTMLファイルと同じディレクトリに配置します。<head> <script src="https://github.com/Mottie/tablesorter"></script> <link rel="stylesheet" href="https://github.com/Mottie/tablesorter"> </head>
- jQueryでテーブルソートを行う方法は他にもいくつかあります。
- ソート機能以外にも、テーブル操作に関する様々なjQueryプラグインが提供されています。
jQueryを使ったHTMLテーブルソートのサンプルコード
HTML
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>jQuery Table Sort</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tablesorter/2.31.0/jquery.tablesorter.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/tablesorter/2.31.0/css/tablesorter.min.css">
</head>
<body>
<h1>jQuery Table Sort</h1>
<table id="myTable">
<thead>
<tr>
<th>名前</th>
<th>年齢</th>
<th>性別</th>
</tr>
</thead>
<tbody>
<tr>
<td>田中 太郎</td>
<td>35</td>
<td>男性</td>
</tr>
<tr>
<td>佐藤 花子</td>
<td>28</td>
<td>女性</td>
</tr>
<tr>
<td>鈴木一郎</td>
<td>42</td>
<td>男性</td>
</tr>
</tbody>
</table>
<script>
$(document).ready(function(){
$("#myTable").tablesorter({
sortList: [[0,0]], // 最初の列を昇順でソート
headers: {
2: { sorter: "text" } // 性別列を文字列としてソート
}
});
});
</script>
</body>
</html>
説明
- HTML構造:
<table>
タグでテーブル要素を作成します。<thead>
タグでヘッダー行を定義します。<th>
タグで各列のヘッダーを設定します。
- jQueryライブラリの読み込み:
- tablesorterの初期化:
$(document).ready()
内で、tablesorter()
メソッドを呼び出して、ソート対象のテーブルを指定します。sortList
オプションで、最初の列を昇順でソートするように設定します。headers
オプションで、性別列を文字列としてソートするように設定します。
このコードを実行すると、以下のようになります。
- テーブルのヘッダーをクリックすると、その列でソートできます。
- デフォルトでは、名前列が昇順でソートされます。
- 性別列は、文字列としてソートされます。
カスタマイズ
このコードはあくまで基本的な例です。tablesorter
プラグインは様々なオプションを提供しているので、必要に応じてカスタマイズすることができます。詳細は、tablesorterの公式ドキュメントを参照してください。https://github.com/Mottie/tablesorter
jQueryを使わないでHTMLテーブルをソートする方法
JavaScriptのみを使用する
以下のJavaScriptコードを使って、テーブルを名前列で昇順にソートすることができます。
function sortTable(columnName) {
var table = document.getElementById("myTable");
var rows = table.getElementsByTagName("tr");
// ヘッダー行を除外
rows = Array.prototype.slice.call(rows, 1);
// ソート対象の列を取得
var index = getColumnIndex(columnName);
// ソート
rows.sort(function(a, b) {
var aValue = a.getElementsByTagName("td")[index].textContent;
var bValue = b.getElementsByTagName("td")[index].textContent;
return (aValue < bValue) ? -1 : (aValue > bValue) ? 1 : 0;
});
// ソート結果をテーブルに反映
for (var i = 0; i < rows.length; i++) {
table.appendChild(rows[i]);
}
}
function getColumnIndex(columnName) {
var headerRow = document.getElementById("myTable").getElementsByTagName("tr")[0];
var cells = headerRow.getElementsByTagName("th");
for (var i = 0; i < cells.length; i++) {
if (cells[i].textContent === columnName) {
return i;
}
}
return -1;
}
- sortTable関数:
- この関数は、ソート対象の列名を受け取り、その列でテーブルをソートします。
- まず、
getElementById
を使ってテーブル要素を取得します。 - ヘッダー行を除外するために、
Array.prototype.slice.call
を使って配列をスライスします。 getColumnIndex
関数を使って、ソート対象の列のインデックスを取得します。sort
メソッドを使って、行の配列をソートします。ソートの基準は、function
引数で指定した比較関数です。この比較関数は、2つの行のセル値を比較し、小さい方が先頭に来るようにソートします。- 最後に、
appendChild
メソッドを使って、ソート結果をテーブルに反映します。
- getColumnIndex関数:
- この関数は、列名を受け取り、その列のインデックスを返します。
- 次に、ヘッダー行内のすべてのセルをループし、セル値が引数で渡された列名と一致するかどうかを確認します。
- 一致するセルが見つかったら、そのセルのインデックスを返します。
- 一致するセルが見つからない場合は、-1を返します。
使い方
- 上記のJavaScriptコードをHTMLファイルに記述します。
sortTable
関数を呼び出して、ソートしたい列名を指定します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>HTML Table Sort</title>
<script>
function sortTable(columnName) {
// ... (上記と同じコード)
}
function getColumnIndex(columnName) {
// ... (上記と同じコード)
}
</script>
</head>
<body>
<h1>HTML Table Sort</h1>
<table id="myTable">
<thead>
<tr>
<th>名前</th>
<th>年齢</th>
<th>性別</th>
</tr>
</thead>
<tbody>
<tr>
<td>田中 太郎</td>
<td>35</td>
<td>男性</td>
</tr>
<tr>
<td>佐藤 花子</td>
<td>28</td>
<td>女性</td>
</tr>
<tr>
<td>鈴木一郎</td>
<td>42</td>
<td>男性</td>
</tr>
</tbody>
</table>
<button onclick="sortTable('名前')">名前でソート</button>
<button onclick="sortTable('年齢')">年齢でソート</button>
<button onclick="sortTable('性別')">性別でソート</button>
</body>
</html>
jquery sorting html-table