$.fn.pagelist = function (arg, methodname) {
if (typeof methodname === "string" && $.trim(methodname) != "") {
switch (methodname) {
case 'refresh'://刷新当前页,一般用于删除或者更新后
$(this).each(function () {
var arg = $(this).data('pagelistarg');
if (arg != null && typeof arg.clickcallback === "function") {
arg.clickcallback(arg.currentpage);
}
});
break;
}
}
else {
var defaultsettings = {
prevtext: 'prev',//显示的前一页文本
nexttext: 'next',//显示的下一页文本
showgolink: 'auto',//是否显示快速跳转,可能的值为auto 自动判断;true 永远显示;false 永不显示
goinputtype: 'select',//如何显示快速跳转输入,可能的值为select 下拉列表;text 输入框,默认值为select
gotext: 'go',//显示的快速跳转文本
recordtext: '',//显示记录数,为空时不显示,否则按照占位符显示文本,{0}表示总页数,{1}表示总记录数
clickcallback: function (currentpage) { },//链接被点击时触发的事件,currentpage表示当前点击的是第几页,索引从1开始
readycallback: function (currentpage) { },//链接被点击时触发的事件,currentpage表示当前点击的是第几页,索引从1开始
renderpercall: true,//是否每次点击都重新绘制,如果每次clickcallback事件中都会重新绘制pagelist,此处请设置为false减少绘制消耗
pagesize: 10,//每页显示的数据条数
currentpage: 1,//当前第几页,索引从1开始
currentid:0,
currentclassid:0,
totalpage:1,
totalcount: 0,//总记录数
currentpagecenter: true,//当前页是否居中,true表示居中,false表示按showpagerange倍率范围显示,注意此值会导致完全不同的显示方式
showpagerange: 5,//允许最小值3,当currentpagecenter设置为true时,表示去除第一页,最后一页后,还需显示的页面数量;为false时,表示在倍率范围内应当显示的页面链接数量,
currenturl:'',
};
arg = $.extend({}, defaultsettings, arg);
// var totalpages = ~~(arg.totalcount / arg.pagesize) + (~~(arg.totalcount % arg.pagesize) == 0 ? 0 : 1);//获取总页数
var totalpages =arg.totalpage;
if (arg.currentpage < 1) {//修正当前页页码为第一页
arg.currentpage = 1;
}
if (arg.currentpage > totalpages) {//修正当前页页码为最后一页
arg.currentpage = totalpages;
}
if (!(arg.showpagerange > 2)) {
arg.showpagerange = 3;
}
$(this).data('pagelistarg', arg);
$(this).each(function () {
$(this).empty();//无数据
if (totalpages > 0) {
var ul = $('
');
var startpage = 2, endpage = totalpages - 1;//排除首页最后一页后显示的第一个超链接,最后一个超链接
var prevs = false, nexts = false;//是否需要显示…对应的超链接
if (arg.showpagerange + 4 < totalpages) {//因为页面链接最多包含arg.showpagerange + 4个,所以如果总页数大于时,才显示对应的…
if (!arg.currentpagecenter) {
var rangeidx = ~~(arg.currentpage / arg.showpagerange) + (~~(arg.currentpage % arg.showpagerange) == 0 ? 0 : 1);
startpage = (rangeidx - 1) * arg.showpagerange + 1;
endpage = rangeidx * arg.showpagerange;
if (startpage < 2) { startpage = 2; }//修正
if (endpage >= totalpages) { endpage = totalpages - 1; }//修正
if (startpage >= endpage) { startpage = startpage - arg.showpagerange; }//修正
if (endpage == totalpages - 2) { endpage++; }//修正
prevs = startpage >= arg.showpagerange;
nexts = endpage < totalpages - 1;
}
else {
var prevreduce = ~~(arg.showpagerange / 2);
var nextadd = prevreduce;
if (~~(arg.showpagerange % 2) == 0) {
prevreduce--;//showpagerange为偶数时,currentpage前面显示的页码链接数比后面显示的链接数少一个
}
if (prevreduce < 0) {//修正当showpagerange被设置为1导致的负数
prevreduce = 0;
}
startpage = parseint(arg.currentpage) - parseint(prevreduce);
if (startpage < 2) { startpage = 2; }//修正startpage
endpage = parseint(arg.currentpage) + parseint(nextadd);
if (endpage - startpage < arg.showpagerange) { endpage = startpage + arg.showpagerange - 1; }//根据startpage修正endpage
if (endpage > totalpages - 1) { endpage = totalpages - 1; startpage = endpage - arg.showpagerange + 1; }//修正endpage,并同步修正startpage
if (startpage <= 3) {//再次修正startpage
startpage = 2;
}
if (endpage > totalpages - 3) {//再次修正endpage
endpage = totalpages - 1;
}
prevs = startpage - 1 > 1;
nexts = endpage + 1 < totalpages;
}
}
if(arg.currentpage > 1){
var li = renderdoms(arg.prevtext, arg.currentpage == 1, false, arg.currentpage - 1, arg);//前一页
}else{
var li = renderdoms(arg.prevtext, arg.currentpage == 1, false, arg.currentpage, arg);//前一页
}
li.addclass("prev");
ul.append(li);
ul.append(renderdoms("1", arg.currentpage == 1, arg.currentpage == 1, 1, arg));//第一页
if (prevs) {
ul.append(renderdoms('…', false, false, startpage - 1, arg));//…页
}
for (var i = startpage; i <= endpage; i++) {
ul.append(renderdoms(i, arg.currentpage == i, arg.currentpage == i, i, arg));//第i页
}
if (nexts) {
ul.append(renderdoms('…', false, false, parseint(endpage) + parseint(1), arg));//…页
}
if (totalpages > 1) {
ul.append(renderdoms(totalpages, arg.currentpage == totalpages, arg.currentpage == totalpages, totalpages, arg));//最后一页
}
if(arg.currentpage == totalpages){
li = renderdoms(arg.nexttext, arg.currentpage == totalpages, false, parseint(arg.currentpage), arg);//下一页
}else{
li = renderdoms(arg.nexttext, arg.currentpage == totalpages, false, parseint(arg.currentpage) + 1, arg);//下一页
}
li.addclass("next");
ul.append(li);
var showgo;
switch ((arg.showgolink + '').tolowercase()) {
case "true":
showgo = true; break;
case "false":
showgo = false; break;
default:
showgo = arg.showpagerange + 4 < totalpages; break;
}
if (showgo) {
li = $('' + arg.gotext + '');
var sel;
if (arg.goinputtype.tolowercase() != 'text') {
sel = $('');//
for (var i = 1; i <= totalpages; i++) {
sel.append('');
}
sel.val(arg.currentpage);
}
else {
sel = $('');
sel.focus(function () {
$(this).val('');
}).change(function () {
var num = parseint($(this).val());
var a =$(this);
console.log(a)
console.log(num)
if (num && num > 0) {
if (num > totalpages) {
num = totalpages;
}
$(this).val(num);
}
else {
$(this).val('');
}
}).keyup(function () { $(this).change(); });
}
var sp = li.find('span');
sel.insertbefore(sp);
sp.click(function () {
var pagenumber = ~~$(this).parent().find('.go:eq(0)').val();
if (pagenumber > 0) {
clickevent($(this).parent(), arg, pagenumber);
}
});
// ul.append(li);
}
if (typeof arg.recordtext === "string" && $.trim(arg.recordtext) != "") {
ul.append('' + arg.recordtext.replace(/\{0\}/g, totalpages).replace(/\{1\}/g, arg.totalcount) + '');
}
$(this).append(ul);
}
});
}
// href="/case/list/0-0-'+pagenumber+'.html"
function renderdoms(text, disable, active, pagenumber, arg) {
var li = $('' + text + '');
if (active) {
li.addclass("active");
$(document).ready(function() {
if (typeof arg.readycallback === "function") {
arg.readycallback(pagenumber);
}
// console.log(pagenumber)
if (arg.renderpercall) {
arg.currentpage = pagenumber;
var a = $('active').parent().parent().pagelist(arg);
// console.log(a)
}
});
}
if (disable) {
li.addclass("disable");
}
else {
li.click(function () {
clickevent(this, arg, pagenumber);
});
}
return li;
}
function clickevent(dom, arg, pagenumber) {
if (typeof arg.clickcallback === "function") {
arg.clickcallback(pagenumber);
}
if (arg.renderpercall) {
arg.currentpage = pagenumber;
var b =$(dom).parent().parent().pagelist(arg);
}
}
};