列の値に基づいてテーブルの行をフィルタリングする方法を知りたいのですが。プラグインは除外されていますが、これを機能させる方法を理解したいと思います。
あなたの質問はかなり曖昧ですが、一般的な考え方は次のようになります。
$("td").filter(function() {
return $(this).text().indexOf("whatever") !== -1;
}).parent().remove();
これが 実例 です。最初にすべてのテーブルセルを選択し、次にテキストに基づいてそれらをフィルタリングし、残りの行の親(tr
である必要があります)を削除します。
個々の列を気にしない場合は、tr
要素を選択して、parent
への呼び出しを取り除くことができます。 text
は、選択したtr
のすべての子のテキストを返すため、これは引き続き機能します。
コメントに基づいて更新
上記は、一致するテーブル行をDOMから完全に削除します。それらを非表示にしたい場合は、remove
をhide
に置き換えることができます。その後、行を再び表示したい場合は、次のようにすることができます。
$("tr").show();
これは、すべてのtr
要素を選択して表示します(すでに表示されている要素は影響を受けないため、以前に非表示にされた要素だけが再び表示されます)。
テーブルの行をフィルタリングする別の例を次に示します。フィルタ値とテーブル行のテキストを小文字にすると、フィルタの大文字と小文字が区別されなくなります。
$(function() {
$("#filter").on("keyup", function() {
var value = $(this).val().toLowerCase();
$("#example-table > tbody > tr").filter(function() { $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
});
});
});
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
<div class="form-group">
<label for="filter">Filter:</label> <input type="text" id="filter">
</div>
<table id="example-table">
<thead>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
</thead>
<tbody>
<tr>
<td>Bob</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr>
<td>Jenny</td>
<td>Smith</td>
<td>51</td>
</tr>
<tr>
<td>Mike</td>
<td>Smithers</td>
<td>52</td>
</tr>
</tbody>
</table>
</body>
</html>
すべてのテーブルフィルタリングの背後にある基本的な考え方は、すべての行を非表示にしてから、<td>
のコンテンツに検索文字列が含まれている行を表示することです。
JQueryを使用すると、魔法は次のように実行されます。
$('tr').filter(":contains('" + searchstring + "')").show();
しかし、これにjQueryを使用する必要はありません-私はそれのためにプレーンなJSソリューションをコーディングしました。あなたはそれを見つけることができます ここ 。