私はDataTables(datatables.net)を使用しており、検索ボックスをテーブルの外(たとえば、ヘッダーdiv)に配置したいと考えています。
これは可能ですか?
私はDataTables(datatables.net)を使用しており、検索ボックスをテーブルの外(たとえば、ヘッダーdiv)に配置したいと考えています。
これは可能ですか?
回答:
DataTables APIを使用してテーブルをフィルタリングできます。したがって、必要なのは、DataTablesへのフィルター関数をトリガーするキーアップイベントを持つ独自の入力フィールドだけです。cssまたはjqueryを使用すると、既存の検索入力フィールドを非表示/削除できます。あるいは、DataTablesには、それを削除する/含めない設定があるかもしれません。
これに関するDatatables APIドキュメントをチェックアウトしてください。
例:
HTML
<input type="text" id="myInputTextField">
JS
oTable = $('#myTable').DataTable(); //pay attention to capital D, which is mandatory to retrieve "api" datatables' object, as @Lionel said
$('#myInputTextField').keyup(function(){
oTable.search($(this).val()).draw() ;
})
$(".dataTables_filter :input").focus().val(value).keypress();
ましたkeyup
。ただし、APIを使用することはありません。エレガントなソリューションです。
@lvkzコメントによると:
大文字のdでデータテーブルを使用している場合.DataTable()
(これはDatatable APIオブジェクトを返します)これを使用します。
oTable.search($(this).val()).draw() ;
@netbrainの回答です。
小文字のdでデータテーブルを使用している場合.dataTable()
(これはjqueryオブジェクトを返します)これを使用します。
oTable.fnFilter($(this).val());
oTable.fnFilter($(this).val());
私も働いた
.DataTable()
。 oTable.fnFilter($(this).val());
あなたが使用する場合.dataTable()
の違いを首都Dにあります。
oTable.api().search($(this).val()).draw();
それはあなたが改ページを手動で制御したい場合は特に有用であることができlength
、同様:oTable.api().page.len($(this).val()).draw();
このためのsDom
オプションを使用できます。
独自のdivに検索入力があるデフォルト:
sDom: '<"search-box"r>lftip'
jQuery UIを使用する場合(にbjQueryUI
設定true
):
sDom: '<"search-box"r><"H"lf>t<"F"ip>'
上記は、実際のテーブルの外にあるという名前のクラスを持つinput
独自の中に検索/フィルタリング要素を配置します。div
search-box
特別な省略構文を使用していますが、実際には、スローしたHTMLをすべて取り込むことができます。
'<"search-box"r><"H"lf>t<"F"ip>'
は、さらに悪いものが存在するかどうか不明
language: { search: "example", searchPlaceholder: "example" }
これは、DataTablesバージョン1.10.4に役立ちました。
var oTable = $('#myTable').DataTable();
$('#myInputTextField').keyup(function(){
oTable.search( $(this).val() ).draw();
})
最近のバージョンでは構文が異なります。
var table = $('#example').DataTable();
// #myInput is a <input type="text"> element
$('#myInput').on('keyup change', function () {
table.search(this.value).draw();
});
この例では、table
データテーブルが最初に初期化されるときに割り当てられた変数を使用していることに注意してください。この変数を使用できない場合は、次のように使用します。
var table = $('#example').dataTable().api();
// #myInput is a <input type="text"> element
$('#myInput').on('keyup change', function () {
table.search(this.value).draw();
});
以降:DataTables 1.10
これはあなたのために働くはずです:(DataTables 1.10.7)
oTable = $('#myTable').dataTable();
$('#myInputTextField').on('keyup change', function(){
oTable.api().search($(this).val()).draw();
})
または
oTable = $('#myTable').DataTable();
$('#myInputTextField').on('keyup change', function(){
oTable.search($(this).val()).draw();
})
私も同じ問題を抱えていました。
投稿されたすべての代替案を試してみましたが、うまくいきませんでした。正しくない方法を使用しましたが、完全に機能しました。
検索入力の例
<input id="serachInput" type="text">
jqueryコード
$('#listingData').dataTable({
responsive: true,
"bFilter": true // show search input
});
$("#listingData_filter").addClass("hidden"); // hidden search input
$("#serachInput").on("input", function (e) {
e.preventDefault();
$('#listingData').DataTable().search($(this).val()).draw();
});
サーバー側の処理を使用する場合に備えて、@ netbrainの回答にもう1つ追加したいと思います(serverSideを参照)オプションを)。
データテーブル(searchDelayオプションを参照)によってデフォルトで実行されるクエリ調整は、.search()
API呼び出しには適用されません。次の方法で$ .fn.dataTable.util.throttle()を使用することにより、それを元に戻すことができます。
var table = $('#myTable').DataTable();
var search = $.fn.dataTable.util.throttle(
function(val) {
table.search(val).draw();
},
400 // Search delay in ms
);
$('#mySearchBox').keyup(function() {
search(this.value);
});
fnDrawCallback
関数を使用してテーブルを描画するときにdivを移動できます。
$("#myTable").dataTable({
"fnDrawCallback": function (oSettings) {
$(".dataTables_filter").each(function () {
$(this).appendTo($(this).parent().siblings(".panel-body"));
});
}
});
"drawCallback": function (settings) { $(".dataTables_filter").each(function () { $(this).appendTo($(this).parent().siblings(".panel-body")); }); },
$('#example').DataTable({
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "../admin/ajax/loadtransajax.php",
"fnServerParams": function (aoData) {
// Initialize your variables here
// I have assign the textbox value for "text_min_val"
var min_val = $("#min").val(); //push to the aoData
aoData.push({name: "text_min_val", value:min_val});
},
"fnCreatedRow": function (nRow, aData, iDataIndex) {
$(nRow).attr('id', 'tr_' + aData[0]);
$(nRow).attr('name', 'tr_' + aData[0]);
$(nRow).attr('min', 'tr_' + aData[0]);
$(nRow).attr('max', 'tr_' + aData[0]);
}
});
ではloadtransajax.php
、あなたのGET値を受け取ることがあります。
if ($_GET['text_min_val']){
$sWhere = "WHERE (";
$sWhere .= " t_group_no LIKE '%" . mysql_real_escape_string($_GET['text_min_val']) . "%' ";
$sWhere .= ')';
}
JQuery dataTableを使用している場合は、追加するだけ"bFilter":true
です。これにより、テーブルの外側にデフォルトの検索ボックスが表示され、動的に機能します。
$("#archivedAssignments").dataTable({
"sPaginationType": "full_numbers",
"bFilter":true,
"sPageFirst": false,
"sPageLast": false,
"oLanguage": {
"oPaginate": {
"sPrevious": "<< previous",
"sNext" : "Next >>",
"sFirst": "<<",
"sLast": ">>"
}
},
"bJQueryUI": false,
"bLengthChange": false,
"bInfo":false,
"bSortable":true
});