jquery插件pagination实现无刷新ajax分页


Posted in Javascript onSeptember 30, 2015

1、前台使用ajax无刷新分页,主要需要生成分页的工具条,这里使用的是jquery.pagination.js

插件参数可以参考----张龙豪-jquery.pagination.js分页

下面贴出代码

/**
  * This jQuery plugin displays pagination links inside the selected elements.
  *
  * @author Gabriel Birke (birke *at* d-scribe *dot* de)
  * @version .
  * @param {int} maxentries Number of entries to paginate
  * @param {Object} opts Several options (see README for documentation)
  * @return {Object} jQuery Object
  */
 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(){return false;}
   },opts||{});
   
   return this.each(function() {
     /**
      * 计算最大分页显示数目
      */
     function numPages() {
       return Math.ceil(maxentries/opts.items_per_page);
     }  
     /**
      * 极端分页的起始和结束点,这取决于current_page 和 num_display_entries.
      * @返回 {数组(Array)}
      */
     function getInterval() {
       var ne_half = Math.ceil(opts.num_display_entries/);
       var np = numPages();
       var upper_limit = np-opts.num_display_entries;
       var start = current_page>ne_half?Math.max(Math.min(current_page-ne_half, upper_limit), ):;
       var end = current_page>ne_half?Math.min(current_page+ne_half, np):Math.min(opts.num_display_entries, np);
       return [start,end];
     }
     
     /**
      * 分页链接事件处理函数
      * @参数 {int} page_id 为新页码
      */
     function pageSelected(page_id, evt){
       current_page = page_id;
       drawLinks();
       var continuePropagation = opts.callback(page_id, panel);
       if (!continuePropagation) {
         if (evt.stopPropagation) {
           evt.stopPropagation();
         }
         else {
           evt.cancelBubble = true;
         }
       }
       return continuePropagation;
     }
     
     /**
      * 此函数将分页链接插入到容器元素中
      */
     function drawLinks() {
       panel.empty();
       var interval = getInterval();
       var np = numPages();
       // 这个辅助函数返回一个处理函数调用有着正确page_id的pageSelected。
       var getClickHandler = function(page_id) {
         return function(evt){ return pageSelected(page_id,evt); }
       }
       //辅助函数用来产生一个单链接(如果不是当前页则产生span标签)
       var appendItem = function(page_id, appendopts){
         page_id = page_id<?:(page_id<np?page_id:np-); // 规范page id值
         appendopts = jQuery.extend({text:page_id+, classes:""}, appendopts||{});
         if(page_id == current_page){
           var lnk = jQuery("<a href class='currentPage'>" + (appendopts.text) + "</a>");
         }else{
           var lnk = 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 > )
       {
         var end = Math.min(opts.num_edge_entries, interval[]);
         for(var i=; i<end; i++) {
           appendItem(i);
         }
         if(opts.num_edge_entries < interval[] && opts.ellipse_text)
         {
           jQuery("<a href>"+opts.ellipse_text+"</a>").appendTo(panel);
         }
       }
       // 产生内部的些链接
       for(var i=interval[]; i<interval[]; i++) {
         appendItem(i);
       }
       // 产生结束点
       if (interval[] < np && opts.num_edge_entries > )
       {
         if(np-opts.num_edge_entries > interval[]&& opts.ellipse_text)
         {
           jQuery("<a href>"+opts.ellipse_text+"</a>").appendTo(panel);
         }
         var begin = Math.max(np-opts.num_edge_entries, interval[]);
         for(var i=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
     var current_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元素,以方便从所有的内部结构中获取
     var panel = jQuery(this);
     // 获得附加功能的元素
     this.selectPage = function(page_id){ pageSelected(page_id);}
     this.prevPage = function(){ 
       if (current_page > ) {
         pageSelected(current_page - );
         return true;
       }
       else {
         return false;
       }
     }
     this.nextPage = function(){ 
       if(current_page < numPages()-) {
         pageSelected(current_page+);
         return true;
       }
       else {
         return false;
       }
     }
     // 所有初始化完成,绘制链接
     drawLinks();
     // 回调函数
     //opts.callback(current_page, this);
   });
 }

代码还是比较容易看明白的,可以根据自己需要修改,这里使用的是自己的样式

样式代码

.pages {display: inline-block; overflow: hidden;padding: px ;text-align: center; width:%; margin:px ;}
 .pages b{ color:#ef;}
 .pages a { color:#; border: px solid #eee;cursor: pointer;font-size: px;margin-right: px; padding: px px; text-decoration: none; background-color:#fafafa;}
 .pages .currentPage{ background-color: #ae; border: px solid #ae;color: #fff; font-weight: bold;}

原来的css样式:

.pagination a {
   text-decoration: none;
   border: px solid #AAE;
   color: #B;
 }
 
 .pagination a, .pagination span {
   display: inline-block;
   padding: .em .em;
   margin-right: px;
   margin-bottom: px;
 }
 
 .pagination .current {
   background: #B;
   color: #fff;
   border: px solid #AAE;
 }
 
 .pagination .current.prev, .pagination .current.next{
   color:#;
   border-color:#;
   background:#fff;
 }

可以根据自己设计显示样式

2、使用方法

2.1、html显示

<div class="second-ul-ctn">
       <ul class="second-ul" id="ulProducts">
       </ul>
       <div class="pages">
         <input type="hidden" id="hideTotalCount" />
         <div id="Pagination" class="pagination">
         </div>
       </div>
     </div>

ulProducts中放的是要显示的数据,生成的分页的工具条是放在Pagination中的

2.2 javascript代码

$(function () {
      searchMyme(0);
      pageInit();
      $("#btnSearch").on("click", function () {
        searchMyme(0);
        pageInit();
        return false;
      });
    });
    function searchMyme(page, pageination) {
      var month = $("#btnMonth").val();
      var obj = {
        Month: month,
        OpType: "getme",
        page: (page + 1)
        , rows: 10
      };
      var url = "../../Controler/FinaceMo/GetStaffIncome_H.ashx";
      $.get(url, obj, function (data) {
        $("#tbIncome").empty();
        var obj = JSON.parse(data);
        var total = obj.Total;
        $("#hideTotalCount").val(total);
        var arrHtml = [];
        $.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><a href='MyDetail.aspx?Account="+data.Account+"&Month="+data.Month+"' class='a-blue'>查看明细</a></td></tr>");
        });
        $("#tbIncome").append(arrHtml.join(''));
      });
    };
    function pageInit() {
      var totalCount = $("#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了~

Javascript 相关文章推荐
js 获取class的元素的方法 以及创建方法getElementsByClassName
Mar 11 Javascript
原生js实现跨浏览器获取鼠标按键的值
Apr 08 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
Mar 07 Javascript
angular forEach方法遍历源码解读
Jan 25 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
Feb 05 Javascript
利用Jasmine对Angular进行单元测试的方法详解
Jun 12 Javascript
JavaScript异步上传图片文件的实例代码
Jul 04 Javascript
vue动画效果实现方法示例
Mar 18 Javascript
基于Vue SEO的四种方案(小结)
Jul 01 Javascript
vue路由传参三种基本方式详解
Dec 09 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
浅谈Javascript中substr和substring的区别
Sep 30 #Javascript
jQuery复制表单元素附源码分享效果演示
Sep 30 #Javascript
js实现创建删除html元素小结
Sep 30 #Javascript
node.js下LDAP查询实例分享
Sep 30 #Javascript
Javascript中replace()小结
Sep 30 #Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
Sep 30 #Javascript
谈谈JavaScript异步函数发展历程
Sep 29 #Javascript
You might like
一些花式咖啡的配方
2021/03/03 冲泡冲煮
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
深入解析php中的foreach问题
2013/06/30 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
php图片裁剪函数
2018/10/31 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
php中get_object_vars()在数组的实例用法
2021/02/22 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
jquery统计用户选中的复选框的个数
2014/06/06 Javascript
cookie的secure属性详解
2015/04/08 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
vue移动端的左右滑动事件详解
2020/06/17 Javascript
Python多线程学习资料
2012/12/19 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
python上selenium的弹框操作实现
2020/07/13 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
Microsoft Advertising美国:微软搜索广告
2019/05/01 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
应届生的求职推荐信范文
2013/11/30 职场文书
2014村务公开实施方案
2014/02/25 职场文书
人事部专员岗位职责
2014/03/04 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript
Python Matplotlib库实现画局部图
2021/11/17 Python