Подтвердить что ты не робот

Как динамически изменять высоту Datatables jQuery

Я использую jQuery Datatables. Я хочу изменить высоту таблицы, когда пользователь изменяет размер окна. Я могу поймать событие изменения размера окна, которое позволяет мне рассчитать новую высоту. Как я могу назначить новую высоту для объекта datatable?

4b9b3361

Ответ 1

Вы можете использовать следующий код:

var calcDataTableHeight = function() {
  return $(window).height() * 55 / 100;
};

var oTable = $('#reqAllRequestsTable').dataTable({
  "sScrollY": calcDataTableHeight();
});

$(window).resize(function() {
  var oSettings = oTable.fnSettings();
  oSettings.oScroll.sY = calcDataTableHeight(); 
  oTable.fnDraw();
});

Ответ 2

Текущий ответ не сработал у меня (используя v 1.9.1). Я думаю, что это решение не только работает, но и будет работать лучше (и основывается на авторском предложении). В этом примере используется smartresize, чтобы решить проблему изменения размера перекрестного браузера.

var defaultOptions = {...};//your options
var calcDataTableHeight = function() {
    //TODO: could get crazy here and compute (parent)-(thead+tfoot)
    var h = Math.floor($(window).height()*55/100);
    return h + 'px';
};

defaultOptions.sScrollY = calcDataTableHeight();

var oTable = this.dataTable(defaultOptions);

$(window).smartresize(function(){  
    $('div.dataTables_scrollBody').css('height',calcDataTableHeight());
    oTable.fnAdjustColumnSizing();
});

Ответ 3

Проще говоря:

$('#example').dataTable({
   "sScrollY": "auto"
});

Ответ 4

В новых версиях Datatables есть и другие методы, которые в сочетании с разумным использованием таймера для отслеживания триггеров событий изменения размера работают довольно хорошо. Я оставил "древнюю" строку "window.location.reload()" для тех, кто застрял с более старыми версиями DataTables - просто раскомментируйте ее и закомментируйте вызов table.draw().

Примечание: в документации сказано, что правильным вызовом является "table.Draw()" - это не относится к используемой версии (все вызовы строчные).

$(window).on('resize', function(e) 
{
  if (typeof resizeTimer !== 'undefined') {
    clearTimeout(resizeTimer);
  }
  resizeTimer = setTimeout(function() 
  { 

    // Get table context (change "TABLENAME" as required)
       var table = $('#TABLENAME').DataTable();                                 

    // Set new size to height -100px
       $('.dataTables_scrollBody').css('height', window.innerHeight-100+"px");      

    // Force table redraw
       table.draw();        

    // Only necessary for ancient versions of DataTables - use INSTEAD of table.draw()
       // window.location.reload();
  }, 250);    // Timer value for checking resize event start/stop
});

Это.

Ответ 5

Для DataTables 1.10:

            $("#table").DataTable( {
              scrollY: '250px',
              scrollCollapse: true,
              paging: false,
            });

            $('#table').closest('.dataTables_scrollBody').css('max-height', '500px');
            $('#table').DataTable().draw();

Когда вы изменили CSS, вы должны вызвать draw().

Ответ 6

Это работа для меня

$(document).ready(function () {
            $('#dataTable1').dataTable({
                "scrollY": 150,
                "scrollX": 150
            });
            $('.dataTables_scrollBody').height('650px');
        });

Ответ 7

Я думаю, вы можете изменить высоту таблицы css

$(window).resize(function(){
       $('#yourtable').css('height', '100px');
});

Ответ 8

Вот простое решение, как описано здесь

    $(document).ready(function() {
        $('#example').DataTable( {
            scrollY:        '50vh',
            scrollCollapse: true,
            paging:         false
        });
    });

vh Относительно 1% высоты окна просмотра *

Вы можете использовать блок vh, чтобы установить высоту, которая изменяется в зависимости от размера окна.

Поддерживается: Chrome 20. 0+, IE 9. 0+, FireFox 19. 0+, Safari 6. 0+, Opera 20. 0+