DataTable jQueryプラグインを使用している2つのテーブルがあります。テーブルの右下にページネーションを隠す方法はあるのだろうか。
drawCallback オプションを使用してDT draw イベントを処理し、使用可能なページに基づいてページネーションコントロールを表示/非表示にします。
$('#table_id').dataTable({
drawCallback: function(settings) {
var pagination = $(this).closest('.dataTables_wrapper').find('.dataTables_paginate');
pagination.toggle(this.api().page.info().pages > 1);
}
})
$('#dataTable_ListeUser').DataTable( {
//usual pager parameters//
"drawCallback": function ( settings ) {
/*show pager if only necessary
console.log(this.fnSettings());*/
if (Math.ceil((this.fnSettings().fnRecordsDisplay()) / this.fnSettings()._iDisplayLength) > 1) {
$('#dataTable_ListeUser_paginate').css("display", "block");
} else {
$('#dataTable_ListeUser_paginate').css("display", "none");
}
}
});
fnDrawCallback()メソッドを使用して、-ページネーションをdataTableで非表示にすることができます。
var oTable = $('#datatable_sample').dataTable({
"iDisplayLength": 10,
"fnDrawCallback": function(oSettings) {
if ($('#datatable_sample tr').length < 10) {
$('.dataTables_paginate').hide();
}
}
});
リストに表示する行ごとに定義できるlength。
$(this)
は、TypeScriptを使用しているためか、機能しませんでした。そのため、別のアプローチを使用して、テーブルラッパーとDataTables APIのJQuery要素を取得しました。これはBitOfUniverseの答えに触発され、DataTables 1.10でテストされています。
TypeScript:
'drawCallback': (settings: any) => {
// hide pager and info if the table has NO results
const api = new $.fn.dataTable.Api(settings);
const pageCount = api.page.info().pages;
const wrapper = $('#' + settings.sTableId).closest('.dataTables_wrapper');
const pagination = wrapper.find('.dataTables_paginate');
const info = wrapper.find('.dataTables_info');
pagination.toggle(pageCount > 0);
info.toggle(pageCount > 0);
}
この問題を解決するには、「drawCallback」を使用します。
1. Webページで、開発者ツールを使用して「前へ」ボタンを調べます。「前へ」ボタンと「次へ」ボタンの両方をラップするdiv要素が見つかります。 DataTablesは、htmlテーブル要素のIDに基づいて、このdivに自動的にIDを割り当てました。
たとえば、IDが「Atable」のテーブルがあります。このテーブルでは、DataTablesは「Atable_paginate」というIDのdiv要素を自動的に作成し、前のボタンと次のボタンをラップしました。
2. drawCallbackの場合、1ページ未満かどうかをチェックする関数を記述します。存在する場合は、IDを使用して要素を非表示にします。
たとえば、1ページに20件のレコードがあると設定したとします。
pageLength: 20,
つまり、レコードが20未満の場合、「前へ」および「次へ」ボタンを表示する必要はありません。以下のように書きます
drawCallback: function(settings){
if($(this).find('tbody tr').length <= 20){
$('#Atable_paginate').hide();
}
}
3.Atableの初期化は以下のようになります
var table = $('#Atable').DataTable({
pageLength: 20,
lengthChange: false,
drawCallback: function(settings){
if($(this).find('tbody tr').length <= 20){
$('#Atable_paginate').hide();
}
}
});
4. Webページに複数のテーブルがある場合は、この方法を各テーブルに適用します。