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 相关文章推荐
将string解析为json的几种方式小结
Nov 11 Javascript
JavaScript 一道字符串分解的题目
Aug 03 Javascript
JS对象与json字符串格式转换实例
Oct 28 Javascript
高性能JavaScript模板引擎实现原理详解
Feb 05 Javascript
在AngularJS应用中实现一些动画效果的代码
Jun 18 Javascript
js全选按钮的实现方法
Nov 17 Javascript
详解Javascript函数声明与递归调用
Oct 22 Javascript
canvas实现动态小球重叠效果
Feb 06 Javascript
深入理解ES6之数据解构的用法
Jan 13 Javascript
微信小程序slider组件使用详解
Jan 31 Javascript
javascript判断一个变量是数组还是对象
Apr 10 Javascript
javascript设计模式 ? 简单工厂模式原理与应用实例分析
Apr 09 Javascript
浅谈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
PHP中创建并处理图象
2006/10/09 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
JS的replace方法详细介绍
2012/11/09 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
很棒的vue弹窗组件
2017/05/24 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
Python学习笔记之os模块使用总结
2014/11/03 Python
Python进行数据科学工作的简单入门教程
2015/04/01 Python
Python实现的计数排序算法示例
2017/11/29 Python
Python实现识别手写数字大纲
2018/01/29 Python
windows下python和pip安装教程
2018/05/25 Python
python的debug实用工具 pdb详解
2019/07/12 Python
pandas中ix的使用详细讲解
2020/03/09 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
五一活动标语
2014/06/30 职场文书
师德师风整改措施
2014/10/24 职场文书
工程安全生产协议书
2014/11/21 职场文书
求职信格式范文
2015/03/19 职场文书
写给女朋友的保证书
2015/05/09 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript
css3新特性的应用示例分析
2022/03/16 HTML / CSS