DataTables - 创建自定义分页样式(加载更多样式)

时间:2016-05-18 14:39:00

标签: javascript jquery pagination 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()添加更多行)或使用滚动   检测做同样的事情。

     

阿伦

2 个答案:

答案 0 :(得分: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();
} );

答案 1 :(得分:0)

你可以使用类似的东西:

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

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

它只适用于移动设备并使用您现有的功能......