2012-04-11 65 views
0

我想在JavaScript中创建分页,类似于现在看到的大多数分页,如果有很多页面,它将使用点来分解页面显示。 (1 2 ... 22 23 24 25 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); 
     } 
    } 
} 

回答

0

我在+的NodeJS下划线+翡翠+解决方案引导

前:

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

index.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