jquery插件pagination实现无刷新ajax分页
1、前台使用ajax无刷新分页,主要需要生成分页的工具条,这里使用的是jquery.pagination.js
插件参数可以参考----张龙豪-jquery.pagination.js分页
下面贴出代码
/**
*ThisjQueryplugindisplayspaginationlinksinsidetheselectedelements.
*
*@authorGabrielBirke(birke*at*d-scribe*dot*de)
*@version.
*@param{int}maxentriesNumberofentriestopaginate
*@param{Object}optsSeveraloptions(seeREADMEfordocumentation)
*@return{Object}jQueryObject
*/
jQuery.fn.pagination=function(maxentries,opts){
opts=jQuery.extend({
items_per_page:,
num_display_entries:,
current_page:,
num_edge_entries:,
link_to:"#",
prev_text:"Prev",
next_text:"Next",
ellipse_text:"...",
prev_show_always:true,
next_show_always:true,
callback:function(){returnfalse;}
},opts||{});
returnthis.each(function(){
/**
*计算最大分页显示数目
*/
functionnumPages(){
returnMath.ceil(maxentries/opts.items_per_page);
}
/**
*极端分页的起始和结束点,这取决于current_page和num_display_entries.
*@返回{数组(Array)}
*/
functiongetInterval(){
varne_half=Math.ceil(opts.num_display_entries/);
varnp=numPages();
varupper_limit=np-opts.num_display_entries;
varstart=current_page>ne_half?Math.max(Math.min(current_page-ne_half,upper_limit),):;
varend=current_page>ne_half?Math.min(current_page+ne_half,np):Math.min(opts.num_display_entries,np);
return[start,end];
}
/**
*分页链接事件处理函数
*@参数{int}page_id为新页码
*/
functionpageSelected(page_id,evt){
current_page=page_id;
drawLinks();
varcontinuePropagation=opts.callback(page_id,panel);
if(!continuePropagation){
if(evt.stopPropagation){
evt.stopPropagation();
}
else{
evt.cancelBubble=true;
}
}
returncontinuePropagation;
}
/**
*此函数将分页链接插入到容器元素中
*/
functiondrawLinks(){
panel.empty();
varinterval=getInterval();
varnp=numPages();
//这个辅助函数返回一个处理函数调用有着正确page_id的pageSelected。
vargetClickHandler=function(page_id){
returnfunction(evt){returnpageSelected(page_id,evt);}
}
//辅助函数用来产生一个单链接(如果不是当前页则产生span标签)
varappendItem=function(page_id,appendopts){
page_id=page_id<?:(page_id<np?page_id:np-);//规范pageid值
appendopts=jQuery.extend({text:page_id+,classes:""},appendopts||{});
if(page_id==current_page){
varlnk=jQuery("<ahrefclass='currentPage'>"+(appendopts.text)+"</a>");
}else{
varlnk=jQuery("<a>"+(appendopts.text)+"</a>")
.bind("click",getClickHandler(page_id))
.attr('href',opts.link_to.replace(/__id__/,page_id));
}
if(appendopts.classes){lnk.addClass(appendopts.classes);}
panel.append(lnk);
}
//产生描述
panel.append("<span>共有"+maxentries+"条记录,当前第<b>"+(current_page+)+"</b>/"+np+"页</span>");
//产生"Previous"-链接
if(opts.prev_text&&(current_page>||opts.prev_show_always)){
appendItem(current_page-,{text:opts.prev_text,classes:"prev"});
}
//产生起始点
if(interval[]>&&opts.num_edge_entries>)
{
varend=Math.min(opts.num_edge_entries,interval[]);
for(vari=;i<end;i++){
appendItem(i);
}
if(opts.num_edge_entries<interval[]&&opts.ellipse_text)
{
jQuery("<ahref>"+opts.ellipse_text+"</a>").appendTo(panel);
}
}
//产生内部的些链接
for(vari=interval[];i<interval[];i++){
appendItem(i);
}
//产生结束点
if(interval[]<np&&opts.num_edge_entries>)
{
if(np-opts.num_edge_entries>interval[]&&opts.ellipse_text)
{
jQuery("<ahref>"+opts.ellipse_text+"</a>").appendTo(panel);
}
varbegin=Math.max(np-opts.num_edge_entries,interval[]);
for(vari=begin;i<np;i++){
appendItem(i);
}
}
//产生"Next"-链接
if(opts.next_text&&(current_page<np-||opts.next_show_always)){
appendItem(current_page+,{text:opts.next_text,classes:"next"});
}
}
//从选项中提取current_page
varcurrent_page=opts.current_page;
//创建一个显示条数和每页显示条数值
maxentries=(!maxentries||maxentries<)?:maxentries;
opts.items_per_page=(!opts.items_per_page||opts.items_per_page<)?:opts.items_per_page;
//存储DOM元素,以方便从所有的内部结构中获取
varpanel=jQuery(this);
//获得附加功能的元素
this.selectPage=function(page_id){pageSelected(page_id);}
this.prevPage=function(){
if(current_page>){
pageSelected(current_page-);
returntrue;
}
else{
returnfalse;
}
}
this.nextPage=function(){
if(current_page<numPages()-){
pageSelected(current_page+);
returntrue;
}
else{
returnfalse;
}
}
//所有初始化完成,绘制链接
drawLinks();
//回调函数
//opts.callback(current_page,this);
});
}
代码还是比较容易看明白的,可以根据自己需要修改,这里使用的是自己的样式
样式代码
.pages{display:inline-block;overflow:hidden;padding:px;text-align:center;width:%;margin:px;}
.pagesb{color:#ef;}
.pagesa{color:#;border:pxsolid#eee;cursor:pointer;font-size:px;margin-right:px;padding:pxpx;text-decoration:none;background-color:#fafafa;}
.pages.currentPage{background-color:#ae;border:pxsolid#ae;color:#fff;font-weight:bold;}
原来的css样式:
.paginationa{
text-decoration:none;
border:pxsolid#AAE;
color:#B;
}
.paginationa,.paginationspan{
display:inline-block;
padding:.em.em;
margin-right:px;
margin-bottom:px;
}
.pagination.current{
background:#B;
color:#fff;
border:pxsolid#AAE;
}
.pagination.current.prev,.pagination.current.next{
color:#;
border-color:#;
background:#fff;
}
可以根据自己设计显示样式
2、使用方法
2.1、html显示
<divclass="second-ul-ctn"> <ulclass="second-ul"id="ulProducts"> </ul> <divclass="pages"> <inputtype="hidden"id="hideTotalCount"/> <divid="Pagination"class="pagination"> </div> </div> </div>
ulProducts中放的是要显示的数据,生成的分页的工具条是放在Pagination中的
2.2javascript代码
$(function(){
searchMyme(0);
pageInit();
$("#btnSearch").on("click",function(){
searchMyme(0);
pageInit();
returnfalse;
});
});
functionsearchMyme(page,pageination){
varmonth=$("#btnMonth").val();
varobj={
Month:month,
OpType:"getme",
page:(page+1)
,rows:10
};
varurl="../../Controler/FinaceMo/GetStaffIncome_H.ashx";
$.get(url,obj,function(data){
$("#tbIncome").empty();
varobj=JSON.parse(data);
vartotal=obj.Total;
$("#hideTotalCount").val(total);
vararrHtml=[];
$.each(obj.Rows,function(i,data){
arrHtml.push("<tr><td>"+(i+1)+"</td>");
arrHtml.push("<td>"+data.Account+"</td>");
arrHtml.push("<td>"+data.Name+"</td>");
arrHtml.push("<td>"+data.Month+"</td>");
arrHtml.push("<td>"+data.IncomeAmount+"</td>");
arrHtml.push("<td><ahref='MyDetail.aspx?Account="+data.Account+"&Month="+data.Month+"'class='a-blue'>查看明细</a></td></tr>");
});
$("#tbIncome").append(arrHtml.join(''));
});
};
functionpageInit(){
vartotalCount=$("#hideTotalCount").val();
$("#Pagination").pagination(parseInt(totalCount),{
items_per_page:10,
//current_page:1,//当前选中的页面默认是0,表示第1页
num_edge_entries:2,//两侧显示的首尾分页的条目数,默认为0,好像是尾部显示的个数
num_display_entries:2,//连续分页主体部分显示的分页条目数,默认是10
link_to:"javascript:void(0)",//分页的链接
prev_text:"上一页",
next_text:"下一页",
prev_show_always:true,
next_show_always:true,
callback:searchMyIncome
});
}
searchMyme是获取分页的数据,将总数放到一个隐藏的控件中,总数分页控件需要使用,这里ajax调用需要同步执行,不然取不到返回的总数
pageInit()就是初始化控件
这样设置基本就OK了~