1

我正在尝试在 JavaScript 中创建分页,类似于您现在看到的大多数分页,如果有很多页面,它将使用点来分解页面显示。即(1 2 ... 22 23 24 25 26 27 28 ... 110 111)

这是我到目前为止的代码,但这不起作用。我只显示当前页面。有什么想法我在这里想念的吗?

仅供参考 - 你会注意到我正在使用_.range(),这是来自 Underscore.js 和$.inArray(),这是来自 jQuery。

您还会注意到我有iPage,默认情况下我的分页从 0 开始(page是我所在的当前页面索引),所以我只是为了显示而添加 1 - 我已经尝试了两种方法,我得到了同样的问题。

非常感谢您的帮助!

编辑:我刚刚在下面添加了一条 else 语句,现在它显示 (1 2 3 21),21 是最后一页,1 是我所在的页面。

var midRange = 7;
var paging = '';
var iPage = page + 1;

if(totalPages > 10) {

    var startRange = iPage - Math.floor(midRange / 2);
    var endRange   = page + Math.floor(midRange / 2);

    if(startRange <= 0) {
        endRange += Math.abs(startRange + 1);
        startRange = 1;
    }

    if(endRange > totalPages) {
        startRange -= (endRange - totalPages);
        endRange = totalPages;
    }

    var range = _.range(startRange, endRange);

    for(i = 1; i <= totalPages; i++) {

        if(range[0] > 2 && i == range[0]) {
            paging += ' ... ';
            console.log(paging);
        }

        inArray = $.inArray(i, range);

        if (inArray > -1)
            isInArray = true;
        else 
            isInArray = false;

        if(i == 0 || i == totalPages || isInArray) {
            if(i == iPage) {
                paging += '<a href="#"><b>'+i+'</b></a>';
                console.log(paging);
            } else {
                paging += '<a href="#">'+i+'</a>';
            }
        }
        if(range[midRange-1] < totalPages && i == range[midRange-1]) {
            paging += ' ... ';
            console.log(paging);
        }                   
    }
} else {
    for(i = 1; i <= totalPages; i++) {

        if(i == iPage) {
            paging += '<a href="#"><b>'+i+'</b></a>';
            console.log(paging);
        } else {
            paging += '<a href="#">'+i+'</a>';
            console.log(paging);
        }
    }   
}
4

2 回答 2

0

我在 nodejs + underscore + jam + bootstrap 中的解决方案

前:

var pages = 200;
var limit = 50;
var page = 2;
var _ = required('underscore')

索引.jade

.pagination
    ul
        - if(page > 0)
            li
                a(href='/page/'+ page) Prev
        - var _next = 10, _prev = (page +1) - 10
        - if(pages - (page + 1) < _next) _next = pages - (page + 1)
        - if(_prev < 0) _prev = 1;
        - var range = _.range(_prev, page + (_next+2));
        - each i in range
            li(class=i==page+1?'active':null)
                a(href='/page/'+(i)) #{i}
        - if((page+1) < pages)
            li
                a(href='/page/'+ (page +1)) Next
于 2013-12-05T18:03:16.993 回答
0

您可以考虑使用“对数”样式的分页。在此处查看我的帖子:如何为许多页面进行页面导航?对数页面导航。否则,实际上并不容易通过单击导航链接到达“...”范围中间的任何页面。我的答案中包含 PHP 和 ASP 中的代码;转换为 javascript 应该不难。

于 2013-01-07T11:07:19.470 回答