How to change the number of pagination buttons of the DataTables jQuery plugin

后端 未结 3 1515
温柔的废话
温柔的废话 2020-12-14 09:00

By default, DataTables plugin shows 7 paging buttons (including the ellipses) like

Previous 1 2 3 <

相关标签:
3条回答
  • 2020-12-14 09:49

    I finally found it after fiddling with the DataTable javascript object and the DataTables' source code.

    You have to add this line (either before or after initialization):

    $.fn.DataTable.ext.pager.numbers_length = 3;
    

    Note that this will show up like

    Previous 1 ... 10 Next

    and not

    Previous 1 2 ... 10 Next

    so be sure to include the ellipses in the length number.

    Edit:

    I saw some problems with this solution when advancing through the pages.

    I had to rewrite their _numbers function like this:

    function _numbers(page, pages) {
        var
            numbers = [],
            buttons = 5, // added here the number of buttons
            half = Math.floor(buttons / 2);
    
        if(pages <= buttons) {
            numbers = _range(0, pages);
        } else if(page <= half) {
            numbers = _range(0, buttons - 2);
    
            numbers.push("ellipsis");
            numbers.push(pages - 1);
        } else if(page >= pages - 1 - half) {
            numbers = _range(pages - (buttons - 2), pages);
    
            numbers.splice(0, 0, "ellipsis");
            numbers.splice(0, 0, 0);
        } else {
            numbers.push(page); // changed this from _range(page - 1, page + 2);
            numbers.push("ellipsis");
            numbers.push(pages - 1);
            numbers.splice(0, 0, "ellipsis");
            numbers.splice(0, 0, 0);
        }
    
        numbers.DT_el = "span";
    
        return numbers;
    }
    

    And used this to point out DataTables to my own function:

    $.fn.DataTable.ext.pager.simple_numbers = function(page, pages) {
        return ["previous", _numbers(page, pages), "next"];
    };
    

    Also, I had to copy their _range function into my main.js file.

    0 讨论(0)
  • 2020-12-14 09:53

    Combine set up with https://www.gyrocode.com/articles/jquery-datatables-pagination-without-ellipses/

    Add the following after the script loaded

    <script>
        $.fn.DataTable.ext.pager.numbers_length = 3;
        $.fn.DataTable.ext.pager.full_numbers_no_ellipses = function (e, r) { var a = [], n = $.fn.DataTable.ext.pager.numbers_length, t = Math.floor(n / 2), l = function (e, r) { var a; void 0 === r ? (r = 0, a = e) : (a = r, r = e); for (var n = [], t = r; t < a; t++)n.push(t); return n }; return (a = r <= n ? l(0, r) : e <= t ? l(0, n) : e >= r - 1 - t ? l(r - n, r) : l(e - t, e + t + 1)).DT_el = "span", ["first", "previous", a, "next", "last"] };
    </script>
    
    0 讨论(0)
  • 2020-12-14 09:57

    apparently the ideal minimum for DataTableJS is:

    $.fn.DataTable.ext.pager.numbers_length = 5;
    
    0 讨论(0)
提交回复
热议问题