DataTables — создание пользовательского стиля разбивки на страницы (загрузить дополнительные стили)

Я хотел бы использовать стиль разбивки на страницы для DataTable, который удобен для мобильных устройств, мне просто нужна кнопка для загрузки большего количества строк при нажатии, которая будет добавлять строки под текущими видимыми строками.

Я знаю, что это недоступно по умолчанию в DataTables, но я считаю, что это не должно быть сложно создать. Кто-нибудь создал этот метод разбивки на страницы или видел, как он используется в таблице DataTable?

Если нет, как я могу изменить код моей таблицы по адресу https://jsfiddle.net/6k0bshb6/16/ использовать этот стиль нумерации страниц, чтобы сделать мою таблицу удобной для мобильных устройств.

// This function is for displaying data from HTML "data-child-value" tag in the Child Row.
function format(value) {
      return '<div>Hidden Value: ' + value + '</div>';
  }

// Initialization of dataTable and settings.
  $(document).ready(function () {
      var dataTable = $('#example').DataTable({
       bLengthChange: false,
       "pageLength": 5,
       "pagingType": "simple",
       "order": [[ 7, "asc" ]],
       "columnDefs": [
            {
                "targets": [ 5 ],
                "visible": false,
                "searchable": true
            },
            {
                "targets": [ 6 ],
                "visible": false,
                "searchable": true
            },
            {
                "targets": [ 7 ],
                "visible": false,
                "searchable": true
            }
        ],

// Dropdown filter function for dataTable from hidden column number 5 for filtering gifts.
       initComplete: function () {
            this.api().columns(5).every(function () {
                var column = this;
                var select = $('<select><option value="">Show all</option></select>')
                    .appendTo($("#control-panel").find("div").eq(1))
                    .on('change', function () {
                    var val = $.fn.dataTable.util.escapeRegex(
                    $(this).val());
                    column.search(val ? '^' + val + '$' : '', true, false)
                        .draw();
                });
                column.data().unique().sort().each(function (d, j) {
                    select.append('<option value="' + d + '">' + d + '</option>')
                });
            });
        }
    });

// This function is for handling Child Rows.
    $('#example').on('click', 'td.details-control', function () {
          var tr = $(this).closest('tr');
          var row = dataTable.row(tr);

          if (row.child.isShown()) {
              // This row is already open - close it
              row.child.hide();
              tr.removeClass('shown');
          } else {
              // Open this row
              row.child(format(tr.data('child-value'))).show();
              tr.addClass('shown');
          }
    });

// Checkbox filter function below is for filtering hidden column 6 to show Free Handsets only.
    $('#checkbox-filter').on('change', function() {
        dataTable.draw();
    });

    $.fn.dataTable.ext.search.push(
      function( settings, data, dataIndex ) {
        var target = '£0.00';
        var position = data[6]; // use data for the position column
        if($('#checkbox-filter').is(":checked")) {
            if (target === position) {
            return true;
         }
         return false;
        }
        return true;
      }
    );
});

ОБНОВЛЕНИЕ: я нашел некоторую информацию о том, как это сделать, на веб-сайте DataTables, хотя я не совсем понимаю, как интегрировать ее в свою таблицу.

https://datatables.net/forums/discussion/3920/twitter-facebook-style-pagination

Что вы могли бы сделать (я не пробовал, но не могу понять, почему это не сработает...), так это установить зазор загрузки прокрутки (количество пикселей перед нижней частью прокрутки, когда загружаются новые данные) на отрицательное число ( http://datatables.net/usage/options#iScrollLoadGap ), а затем добавьте маленькую кнопку внизу таблицы (возможно, для этого потребуется использовать fnDrawCallback), которая при нажатии загрузит следующий набор данных (fnPageChange('next') должен сделать это).

Кто-нибудь знает, как я могу заставить это работать с моей таблицей? Может ли кто-нибудь показать мне, как это сделать на jsfiddle?

ОБНОВЛЕНИЕ 2: ответ администратора таблицы данных https://datatables.net/forums/discussion/35148/load-more-style-twitter-style-pagination-custom#latest

Упомянутая вами опция iScrollLoadGap недоступна в версии 1.10 — бесконечная прокрутка была удалена в версии 1.10, а вместе с ней и эта опция.

Однако основной принцип по-прежнему остается — у вас может быть кнопка, которую пользователь должен нажать, чтобы загрузить больше строк (либо увеличить размер страницы, либо использовать rows.add(), чтобы добавить больше строк), либо использовать обнаружение прокрутки, чтобы сделать то же самое. .

Аллан


person mitchelangelo    schedule 18.05.2016    source источник


Ответы (2)


Решено..

<button id="button" type="button">Page +5</button> 

//Alternative pagination
$('#button').on( 'click', function () {
    var VisibleRows = $('#example>tbody>tr:visible').length;
    var i = VisibleRows + 5;
    dataTable.page.len( i ).draw();
} );
person mitchelangelo    schedule 20.05.2016

вы можете использовать что-то вроде:

$(window).on("swipeleft", $("#example_next").click());

$(window).on("swiperight", $("#example_previous").click());

он будет работать только на мобильных устройствах и использует существующие функции...

person DIEGO CARRASCAL    schedule 20.05.2016
comment
это не то, что я ищу. Я хотел бы также использовать стиль «Показать больше страниц» на моем основном веб-сайте. Можете ли вы помочь мне обновить "pageLength": 5 при нажатии кнопки? +5 строк за каждый клик? - person mitchelangelo; 20.05.2016
comment
Вы пытались заменить «5» переменной, присвоив ей новое значение и обновив DOM? или этот код - это то, с чем вам нужна помощь? - person DIEGO CARRASCAL; 20.05.2016