DataTable: как скрыть разбиение на страницы и показывать только по мере необходимости?
У меня есть 2 таблицы, которые используют плагин DataTable jQuery.
Мне интересно, есть ли способ скрыть мою разбивку на страницы внизу справа от моего стола.
![enter image description here]()
Примечание:
- Показывать только разбивку на страницы, когда мне это нужно.
- Скрыть разбивку на страницы, когда результаты запроса меньше 10.
Ответы
Ответ 1
Используйте 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);
}
})
Ответ 2
$('#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");
}
}
});
Ответ 3
Используйте "drawCallback" для решения этой проблемы.
1. На веб-странице используйте инструмент разработчика для проверки "предыдущей" кнопки, затем вы найдете элемент div, который обертывает кнопки "предыдущий" и "следующий". DataTables автоматически присваивает id этому элементу на основе идентификатора элемента таблицы html.
Например, у меня есть таблица с id 'Atable'. В этой таблице DataTables автоматически создавал элемент div с идентификатором "Atable_paginate" для обертывания предыдущей и следующей кнопок.
2.For drawCallback, мы пишем функцию, которая проверяет, есть ли менее 1 страницы, если это так, мы скрываем элемент, используя id.
Например, вы установили, что на одной странице есть 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.Если на веб-странице есть несколько таблиц, примените этот метод к каждой таблице.
Ответ 4
$(this)
не работал у меня, возможно потому, что я использую TypeScript. Поэтому я использовал другой подход, чтобы получить элемент JQuery для оболочки таблицы и API DataTables. Это было вызвано ответом 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);
}
Ответ 5
Вы можете использовать метод fnDrawCallback(), чтобы скрыть pagination в dataTable.
var oTable = $('#datatable_sample').dataTable({
"iDisplayLength": 10,
"fnDrawCallback": function(oSettings) {
if ($('#datatable_sample tr').length < 10) {
$('.dataTables_paginate').hide();
}
}
});
Длина, которую вы можете определить по строке, которую вы хотите отобразить в списке.
Ответ 6
Вы можете указать параметры, когда создаете свои данные в Javascript
$('.examples').DataTable({
"paging": false
});
Все параметры перечислены здесь:
http://www.datatables.net/reference/option/