当前位置: 首页 > news >正文

jquery.pagination.js分页插件的运用

插件官方地址:http://plugins.jquery.com/project/pagination

插件js源码

 

 
 
  1. 代码  
  2.  
  3. /**  
  4.  * This jQuery plugin displays pagination links inside the selected elements.  
  5.  *  
  6.  * @author Gabriel Birke (birke *at* d-scribe *dot* de)  
  7.  * @version 1.2  
  8.  * @param {int} maxentries Number of entries to paginate  
  9.  * @param {Object} opts Several options (see README for documentation)  
  10.  * @return {Object} jQuery Object  
  11.  */  
  12. jQuery.fn.pagination = function(maxentries, opts){  
  13.     opts = jQuery.extend({  
  14.         items_per_page:10,  
  15.         num_display_entries:10,  
  16.         current_page:0,  
  17.         num_edge_entries:0,  
  18.         link_to:"#",  
  19.         prev_text:"Prev",  
  20.         next_text:"Next",  
  21.         ellipse_text:"...",  
  22.         prev_show_always:true,  
  23.         next_show_always:true,  
  24.         callback:function(){return false;}  
  25.     },opts||{});  
  26.       
  27.     return this.each(function() {  
  28.         /**  
  29.          * 计算最大分页显示数目  
  30.          */  
  31.         function numPages() {  
  32.             return Math.ceil(maxentries/opts.items_per_page);  
  33.         }      
  34.         /**  
  35.          * 极端分页的起始和结束点,这取决于current_page 和 num_display_entries.  
  36.          * @返回 {数组(Array)}  
  37.          */  
  38.         function getInterval()  {  
  39.             var ne_half = Math.ceil(opts.num_display_entries/2);  
  40.             var np = numPages();  
  41.             var upper_limit = np-opts.num_display_entries;  
  42.             var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), 0):0;  
  43.             var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np);  
  44.             return [start,end];  
  45.         }  
  46.           
  47.         /**  
  48.          * 分页链接事件处理函数  
  49.          * @参数 {int} page_id 为新页码  
  50.          */  
  51.         function pageSelected(page_id, evt){  
  52.             current_page = page_id;  
  53.             drawLinks();  
  54.             var continuePropagation = opts.callback(page_id, panel);  
  55.             if (!continuePropagation) {  
  56.                 if (evt.stopPropagation) {  
  57.                     evt.stopPropagation();  
  58.                 }  
  59.                 else {  
  60.                     evt.cancelBubble = true;  
  61.                 }  
  62.             }  
  63.             return continuePropagation;  
  64.         }  
  65.           
  66.         /**  
  67.          * 此函数将分页链接插入到容器元素中  
  68.          */  
  69.         function drawLinks() {  
  70.             panel.empty();  
  71.             var interval = getInterval();  
  72.             var np = numPages();  
  73.             // 这个辅助函数返回一个处理函数调用有着正确page_id的pageSelected。  
  74.             var getClickHandler = function(page_id) {  
  75.                 return function(evt){ return pageSelected(page_id,evt); }  
  76.             }  
  77.             //辅助函数用来产生一个单链接(如果不是当前页则产生span标签)  
  78.             var appendItem = function(page_id, appendopts){  
  79.                 page_idpage_id = page_id<0?0:(page_id<np?page_id:np-1); // 规范page id值  
  80.                 appendopts = jQuery.extend({text:page_id+1, classes:""}, appendopts||{});  
  81.                 if(page_id == current_page){  
  82.                     var lnk = jQuery("<span class='current'>"+(appendopts.text)+"</span>");  
  83.                 }else{  
  84.                     var lnk = jQuery("<a>"+(appendopts.text)+"</a>")  
  85.                         .bind("click", getClickHandler(page_id))  
  86.                         .attr('href', opts.link_to.replace(/__id__/,page_id));          
  87.                 }  
  88.                 if(appendopts.classes){lnk.addClass(appendopts.classes);}  
  89.                 panel.append(lnk);  
  90.             }  
  91.             // 产生"Previous"-链接  
  92.             if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){  
  93.                 appendItem(current_page-1,{text:opts.prev_text, classes:"prev"});  
  94.             }  
  95.             // 产生起始点  
  96.             if (interval[0] > 0 && opts.num_edge_entries > 0)  
  97.             {  
  98.                 var end = Math.min(opts.num_edge_entries, interval[0]);  
  99.                 for(var i=0; i<end; i++) {  
  100.                     appendItem(i);  
  101.                 }  
  102.                 if(opts.num_edge_entries < interval[0] && opts.ellipse_text)  
  103.                 {  
  104.                     jQuery("<span>"+opts.ellipse_text+"</span>").appendTo(panel);  
  105.                 }  
  106.             }  
  107.             // 产生内部的些链接  
  108.             for(var i=interval[0]; i<interval[1]; i++) {  
  109.                 appendItem(i);  
  110.             }  
  111.             // 产生结束点  
  112.             if (interval[1] < np && opts.num_edge_entries > 0)  
  113.             {  
  114.                 if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text)  
  115.                 {  
  116.                     jQuery("<span>"+opts.ellipse_text+"</span>").appendTo(panel);  
  117.                 }  
  118.                 var begin = Math.max(np-opts.num_edge_entries, interval[1]);  
  119.                 for(var i=begin; i<np; i++) {  
  120.                     appendItem(i);  
  121.                 }  
  122.                   
  123.             }  
  124.             // 产生 "Next"-链接  
  125.             if(opts.next_text && (current_page < np-1 || opts.next_show_always)){  
  126.                 appendItem(current_page+1,{text:opts.next_text, classes:"next"});  
  127.             }  
  128.         }  
  129.           
  130.         //从选项中提取current_page  
  131.         var current_page = opts.current_page;  
  132.         //创建一个显示条数和每页显示条数值  
  133.         maxentries = (!maxentries || maxentries < 0)?1:maxentries;  
  134.         opts.items_per_page = (!opts.items_per_page || opts.items_per_page < 0)?1:opts.items_per_page;  
  135.         //存储DOM元素,以方便从所有的内部结构中获取  
  136.         var panel = jQuery(this);  
  137.         // 获得附加功能的元素  
  138.         this.selectPage = function(page_id){ pageSelected(page_id);}  
  139.         this.prevPage = function(){   
  140.             if (current_page > 0) {  
  141.                 pageSelected(current_page - 1);  
  142.                 return true;  
  143.             }  
  144.             else {  
  145.                 return false;  
  146.             }  
  147.         }  
  148.         this.nextPage = function(){   
  149.             if(current_page < numPages()-1) {  
  150.                 pageSelected(current_page+1);  
  151.                 return true;  
  152.             }  
  153.             else {  
  154.                 return false;  
  155.             }  
  156.         }  
  157.         // 所有初始化完成,绘制链接  
  158.         drawLinks();  
  159.         // 回调函数  
  160.         opts.callback(current_page, this);  
  161.     });  

分页插件参数说明:

参数名描述参数值
maxentries总条目数必选参数,整数
items_per_page每页显示的条目数可选参数,默认是10
num_display_entries连续分页主体部分显示的分页条目数可选参数,默认是10
current_page当前选中的页面可选参数,默认是0,表示第1页
num_edge_entries两侧显示的首尾分页的条目数可选参数,默认是0
link_to分页的链接字符串,可选参数,默认是"#"
prev_text“前一页”分页按钮上显示的文字字符串参数,可选,默认是"Prev"
next_text“下一页”分页按钮上显示的文字字符串参数,可选,默认是"Next"
ellipse_text省略的页数用什么文字表示可选字符串参数,默认是"…"
prev_show_always是否显示“前一页”分页按钮布尔型,可选参数,默认为true,即显示“前一页”按钮
next_show_always是否显示“下一页”分页按钮布尔型,可选参数,默认为true,即显示“下一页”按钮
callback回调函数当点击链接的时候此函数被调用,此函数接受两个参数,新一页的id和pagination容器(一个DOM元素)。如果回调函数返回false,则pagination事件停止执行

 

 

demo

html代码

 

 
 
  1. 代码  
  2.  
  3. <script src="common/jquery.js" type="text/javascript"></script>   
  4. <script src="common/jquery.pagination.js" type="text/javascript"></script>   
  5. <link href="common/tablesorter.css" rel="stylesheet" type="text/css" />   
  6. <link href="common/pagination.css" rel="stylesheet" type="text/css" />   
  7.  
  8. <script language="javascript" type="text/javascript">   
  9.   var orderby = ""; //进行排序的依据   
  10.   $(document).ready(function() {   
  11.   InitData(0); //初始化数据   
  12.   });   
  13.   //这个事件是在翻页时候用的   
  14.   function pageselectCallback(page_id, jq) {   
  15.   InitData(page_id);   
  16.   }   
  17.   function InitData(pageIndex) {   
  18.   var tbody = ""; //声明表格中body部分   
  19.   $.ajax({ //这里使用到Jquery的ajax方法  
  20.   type: "POST",   
  21.   dataType: "json",   
  22.   url: 'GetData.ashx', //请求的处理数据   
  23.   data: "pageIndex=" + (pageIndex + 1) + "&sortType=" + orderby,   
  24.   //传入的参数,第一个参数就是分页的页数,第二个参数为排序的依据   
  25.   //下面的操作就是成功返回数据以后,进行数据的绑定   
  26.   success: function(data) {   
  27.   $("#linkTable tr:gt(0)").remove();   
  28.   var myData = data.Products;   
  29.   $.each(myData, function(i, n) {   
  30.   var trs = "";   
  31.   trs += "<tr><td align='center'>" + n.ProductName + "</td><td>" +   
  32.   n.QuantityPerUnit + "</td></tr>";   
  33.   tbody += trs;   
  34.   });   
  35.   $("#linkTable").append(tbody);   
  36.   }   
  37.   });   
  38.   //加入分页的绑定   
  39.   $("#Pagination").pagination(<%=pageCount %>, {   
  40.   callback: pageselectCallback,   
  41.   prev_text: '< 上一页',   
  42.   next_text: '下一页 >',   
  43.   items_per_page: 20,   
  44.   num_display_entries: 6,   
  45.   current_page: pageIndex,   
  46.   num_edge_entries: 2   
  47.   });   
  48.   }   
  49. </script>   
  50.  
  51.  
  52.  
  53.   <div>   
  54.   <table id="linkTable" cellpadding="6" cellspacing="1" align="left"   
  55.   class="tablesorter" style="width:400px;margin:0 0 20px 5px;">   
  56.   <thead>   
  57.   <tr class="tableHeader" align="center">   
  58.   <th style="width:200px; text-align:center;" >   
  59.   产品名称   
  60.   </th>   
  61.   <th style="width:200px; text-align:center">   
  62.   产品单价   
  63.   </th>   
  64.   </tr>   
  65.   </thead>   
  66.   </table>   
  67.   </div>   
  68.   <div id="Pagination" class="digg"></div> 

代码

<script src="common/jquery.js" type="text/javascript"></script> 
<script src="common/jquery.pagination.js" type="text/javascript"></script> 
<link href="common/tablesorter.css" rel="stylesheet" type="text/css" /> 
<link href="common/pagination.css" rel="stylesheet" type="text/css" />

<script language="javascript" type="text/javascript"> 
  var orderby = ""; //进行排序的依据 
  $(document).ready(function() { 
  InitData(0); //初始化数据 
  }); 
  //这个事件是在翻页时候用的 
  function pageselectCallback(page_id, jq) { 
  InitData(page_id); 
  } 
  function InitData(pageIndex) { 
  var tbody = ""; //声明表格中body部分 
  $.ajax({ //这里使用到Jquery的ajax方法
  type: "POST", 
  dataType: "json", 
  url: 'GetData.ashx', //请求的处理数据 
  data: "pageIndex=" + (pageIndex + 1) + "&sortType=" + orderby, 
  //传入的参数,第一个参数就是分页的页数,第二个参数为排序的依据 
  //下面的操作就是成功返回数据以后,进行数据的绑定 
  success: function(data) { 
  $("#linkTable tr:gt(0)").remove(); 
  var myData = data.Products; 
  $.each(myData, function(i, n) { 
  var trs = ""; 
  trs += "<tr><td align='center'>" + n.ProductName + "</td><td>" + 
  n.QuantityPerUnit + "</td></tr>"; 
  tbody += trs; 
  }); 
  $("#linkTable").append(tbody); 
  } 
  }); 
  //加入分页的绑定 
  $("#Pagination").pagination(<%=pageCount %>, { 
  callback: pageselectCallback, 
  prev_text: '< 上一页', 
  next_text: '下一页 >', 
  items_per_page: 20, 
  num_display_entries: 6, 
  current_page: pageIndex, 
  num_edge_entries: 2 
  }); 
  } 
</script>

 

  <div> 
  <table id="linkTable" cellpadding="6" cellspacing="1" align="left" 
  class="tablesorter" style="width:400px;margin:0 0 20px 5px;"> 
  <thead> 
  <tr class="tableHeader" align="center"> 
  <th style="width:200px; text-align:center;" > 
  产品名称 
  </th> 
  <th style="width:200px; text-align:center"> 
  产品单价 
  </th> 
  </tr> 
  </thead> 
  </table> 
  </div> 
  <div id="Pagination" class="digg"></div>



本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1081577

相关文章:

  • 宋体、变量-Oracle存储过程基本语法-by小雨
  • Allot流量控制系统软件升级过程
  • FTP服务器配置与管理(2) 创建FTP站点
  • 局域网介质访问控制方法
  • javascript中toString跟toLocaleString的区别
  • 【转载】细聊分布式ID生成方法
  • IOS 关键字解读
  • 分布式mongodb搭建-主从搭建
  • PHPExcel 导出 excel
  • 重读杠杆阅读术
  • java 数字枚举
  • EX2T/EXT3文件系统
  • jQuery 2.0发布 不再支持IE 6/7/8
  • FTP服务器配置与管理(5) FTP用户隔离
  • 对于原生态的addEventListener与jqueryDOM操作对于事件处理的区别
  • [nginx文档翻译系列] 控制nginx
  • 【RocksDB】TransactionDB源码分析
  • Apache的基本使用
  • C++11: atomic 头文件
  • ES6核心特性
  • go append函数以及写入
  • React中的“虫洞”——Context
  • Spark RDD学习: aggregate函数
  • SpiderData 2019年2月13日 DApp数据排行榜
  • WePY 在小程序性能调优上做出的探究
  • Zepto.js源码学习之二
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 从零开始在ubuntu上搭建node开发环境
  • 工作中总结前端开发流程--vue项目
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 那些年我们用过的显示性能指标
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 阿里云服务器购买完整流程
  • 函数计算新功能-----支持C#函数
  • ​queue --- 一个同步的队列类​
  • ​虚拟化系列介绍(十)
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (42)STM32——LCD显示屏实验笔记
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (过滤器)Filter和(监听器)listener
  • (七)理解angular中的module和injector,即依赖注入
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)memcache、redis缓存
  • ./configure,make,make install的作用
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • :“Failed to access IIS metabase”解决方法
  • @Data注解的作用
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯