js实现的分页组件 简单可以扩展

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> New Document </TITLE>
<script>
/**
 * 功能描述:客户端分页组件
 * @author hama
 * @version 2008-9-4 v1.0
 * @param  divID      字符串类型 要显示分页div名称 可以支持','分割的多个名称
 * @param  totolCount 数字类型 总记录数
 * @param style  数字类型
  Page.PAGENUMBER_PAGESIZE=1;
  Page.MIN_MAX=2;
 1. style==Page.PAGENUMBER_PAGESIZE
  @callBack  回调函数对象   methodName(pageNumber,pageSize);
  @param1   pageNumber  页码   从1开始的数据 可以为空默认为1
  @param2   pageSize    每页行数  可以为空 默认为8
    2. style==Page.MIN_MAX
  @callBack  回调函数对象   methodName(minItem,maxItem);
  @param1   minItem  从1开始 包含1
  @param2   maxItem  不包含maxItem
  其他的样式类型可自己扩展
 */

function Page(divID,totolCount,callBack,style,param1,param2){
     
      this.pageDivObjArray=new Array();
      var divIdArray =divID.split(",");
   for(var index=0;index<divIdArray.length;index++){
    this.pageDivObjArray[index] = document.getElementById(divIdArray[index]); //分页系统容器
   }

   this.count = parseInt(totolCount); //总记录数

   this.callBackName=divID+"_CB"
   Page[this.callBackName] =callBack; //回调函数


  this.pageSize = 8; //每页记录数
   
     this.maxPage=1;   //最大页数
       //this.maxPage=Math.ceil(this.count/this.pageSize);//总页数

  this.currentPage = 1 ;//当前页 [1-n)
    // if(actionPage && actionPage >0)  this.currentPage=parseInt(actionPage);


  this.innerHTML="" //div中的innerHTML

     switch(style){
  case Page.PAGENUMBER_PAGESIZE:
    if(param2 && param2 >0)  this.pageSize=parseInt(param2);
       this.initPageNubmer(param1,this.pageSize);
    this.initDivPageNubmer();
    break;
  case Page.MIN_MAX:
       this.initPageMax(param1,param2);
    this.initDivMax();
    break;
  default:
      alert("创建js分页样式参数错误style:"+style);
   return;
  }

  
 
   
 this.showPage();

}
Page.PAGENUMBER_PAGESIZE=1;
Page.MIN_MAX=2;
Page.prototype.trim=function(src){
 var pattern=/^/s*|/s*$/g;
 return src.replace(pattern,"");
}
Page.prototype.initPageNubmer =function (actionPage,pageSizeP){

 this.maxPage=Math.ceil(this.count/this.pageSize);//总页数

 if(actionPage && actionPage >0)  this.currentPage=parseInt(actionPage);//当前页

}
Page.prototype.initPageMax=function(minItem,maxItem){
     if(!maxItem) maxItem=minItem+this.pageSize;
  
        if(maxItem && minItem) {
    if(maxItem<minItem){
       var temp=maxItem;
     maxItem=minItem;
     minItem=temp;
    }
       if(minItem<1)  minItem=1;
       if((maxItem-minItem)>0)
       this.pageSize =maxItem-minItem; //每页记录数
   this.maxPage=Math.ceil(this.count/this.pageSize);//总页数

   if(maxItem >1)  this.currentPage=Math.floor((maxItem-1)/this.pageSize);
 }
}
Page.prototype.initDivPageNubmer = function(){
 var hrefCount=5; //显示的连接数 刚开始我对这个变量是当作类变量处理了 后来发现这个变量只和显示相关就把它放到这里了

 var temp = this.currentPage - this.currentPage % hrefCount+1;

 if((this.currentPage % hrefCount)==0)
 temp=temp-2; //显示本身和上一页

 var divInnerHTMl = "";
 divInnerHTMl += "<a href='#' οnclick='Page[/""+this.callBackName+"/"](" +1 +"," +this.pageSize+ ")'>首页</a>";
 if(this.currentPage!=1)
   divInnerHTMl+="&nbsp;<a href='#' οnclick='Page[/""+this.callBackName+"/"]("+(this.currentPage-1)+","+this.pageSize+")'>上一页</a>";
 var n = 1;
 for (var n=1;n <= hrefCount ;n++ )
 {
      if (temp == this.currentPage) {
   
    divInnerHTMl += "&nbsp;"+temp;
   }
   else if(temp<=this.maxPage) {
    divInnerHTMl += "&nbsp;<a href='#' οnclick='Page[/""+this.callBackName+"/"](" +temp+ "," +this.pageSize+ ")'>"+temp+"</a>";
   }
   temp++;
 }
 if(this.currentPage<this.maxPage) //不是末页显示
    divInnerHTMl+="&nbsp;<a href='#' οnclick='Page[/""+this.callBackName+"/"]("+(this.currentPage+1)+","+this.pageSize+")'>下一页</a>";
  divInnerHTMl+="&nbsp;<a href='#' οnclick='Page[/""+this.callBackName+"/"]("+this.maxPage+","+this.pageSize+")'>尾页</a>";
  divInnerHTMl+="&nbsp;<span>(共"+this.maxPage+"页)<span>";
     this.innerHTML=divInnerHTMl;
 
}
Page.prototype.showPage=function(){
       for(var index=0;index<this.pageDivObjArray.length;index++){
        this.pageDivObjArray[index].innerHTML =  this.innerHTML; //分页系统容器
    }
}
Page.prototype.initDivMax = function(){

    var maxItem=this.currentPage*this.pageSize+1;

    var minItem=(this.currentPage-1)*this.pageSize+1;
 var hrefCount=5; //显示的连接数 刚开始我对这个变量是当作类变量处理了 后来发现这个变量只和显示相关就把它放到这里了
 var temp = this.currentPage - this.currentPage % hrefCount+1;
 if((this.currentPage % hrefCount)==0)
 temp=temp-2; //显示本身和上一页
 var divInnerHTMl = "";
 divInnerHTMl += "<a href='#' οnclick='Page[/""+this.callBackName+"/"](" + 1 +"," +(this.pageSize+1)+ ")'>首页</a>";
 if(this.currentPage!=1)
   divInnerHTMl+="&nbsp;<a href='#' οnclick='Page[/""+this.callBackName+"/"]("+(minItem-this.pageSize)+","+(maxItem-this.pageSize)+")'>上一页</a>";
 var n = 1;
 while (n <= hrefCount) {
      if (temp == this.currentPage) {
   
    divInnerHTMl += "&nbsp;"+temp;
   }
   else if(temp<this.maxPage) {
    divInnerHTMl += "&nbsp;<a href='#' οnclick='Page[/""+this.callBackName+"/"](" +((temp-1)*this.pageSize+1)+ "," +(temp*this.pageSize+1)+ ")'>"+temp+"</a>";
   }
   n++;
   temp++;
 }
 if(this.currentPage<this.maxPage)
   divInnerHTMl+="&nbsp;<a href='#' οnclick='Page[/""+this.callBackName+"/"]("+(minItem+this.currentPage)+","+(maxItem+this.pageSize)+")'>下一页</a>";
   divInnerHTMl+="&nbsp;<a href='#' οnclick='Page[/""+this.callBackName+"/"]("+((this.maxPage-1)*this.pageSize+1)+","+(this.count+1)+")'>尾页</a>";
   divInnerHTMl+="&nbsp;<span>(共"+this.maxPage+"页)<span>";
     this.innerHTML=divInnerHTMl;
}

</script>
</HEAD>
 <BODY>
  <div id="dd" ></div>
   <div id="ddd" ></div>
  <div  id="pageMax"></div>
 </BODY>
 <script>
 
  function ff(pageNubmer,pageSize){
    alert("pageNubmer="+pageNubmer+":pageSize="+pageSize);
      //如果刷新页面下班这句调用为非必须
  pageNumObj.initPageNubmer(pageNubmer,pageSize);
  pageNumObj.initDivPageNubmer();
     pageNumObj.showPage();
  }

   function fff(minItem,maxItem){
      alert("minItem="+minItem+"maxItem="+maxItem);
   //如果刷新页面下班这句调用为非必须
   pageMaxObj.initPageMax(minItem,maxItem);
   pageMaxObj.initDivMax();
   pageMaxObj.showPage();
  }
  var pageNumObj= new Page("dd,ddd",200,ff,1,1,10);
  var pageMaxObj= new Page("pageMax",2000,fff,2,1,11);
 </script>
</HTML>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值