jQuery+Ajax实现无刷新分页


Posted in Javascript onOctober 30, 2015

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

/**
  * This jQuery plugin displays pagination links inside the selected elements.
  *
  * @author Gabriel Birke (birke *at* d-scribe *dot* de)
  * @version 1.2
  * @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:10,
   num_display_entries:10,
   current_page:0,
   num_edge_entries:0,
   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/2);
     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), 0):0;
       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<0?0:(page_id<np?page_id:np-1); // 规范page id值
        appendopts = jQuery.extend({text:page_id+1, 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 + 1) + "</b>/" + np + " 页</span>");
       
      // 产生"Previous"-链接
       if(opts.prev_text && (current_page > 0 || opts.prev_show_always)){
         appendItem(current_page-1,{text:opts.prev_text, classes:"prev"});
       }
     // 产生起始点
       if (interval[0] > 0 && opts.num_edge_entries > 0)
       {
         var end = Math.min(opts.num_edge_entries, interval[0]);
         for(var i=0; i<end; i++) {
           appendItem(i);
         }
         if(opts.num_edge_entries < interval[0] && opts.ellipse_text)
         {
           jQuery("<a href>"+opts.ellipse_text+"</a>").appendTo(panel);
        }
       }
       // 产生内部的些链接
       for(var i=interval[0]; i<interval[1]; i++) {
         appendItem(i);
       }
      // 产生结束点
       if (interval[1] < np && opts.num_edge_entries > 0)
      {
         if(np-opts.num_edge_entries > interval[1]&& opts.ellipse_text)
        {
           jQuery("<a href>"+opts.ellipse_text+"</a>").appendTo(panel);
         }
         var begin = Math.max(np-opts.num_edge_entries, interval[1]);
         for(var i=begin; i<np; i++) {
           appendItem(i);
         }
        
       }
       // 产生 "Next"-链接
     if(opts.next_text && (current_page < np-1 || opts.next_show_always)){
         appendItem(current_page+1,{text:opts.next_text, classes:"next"});
       }
      }
     
     //从选项中提取current_page
     var current_page = opts.current_page;
     //创建一个显示条数和每页显示条数值
    maxentries = (!maxentries || maxentries < 0)?1:maxentries;
     opts.items_per_page = (!opts.items_per_page || opts.items_per_page < 0)?1:opts.items_per_page;
     //存储DOM元素,以方便从所有的内部结构中获取
     var panel = jQuery(this);
     // 获得附加功能的元素
     this.selectPage = function(page_id){ pageSelected(page_id);}
     this.prevPage = function(){ 
       if (current_page > 0) {
         pageSelected(current_page - 1);
         return true;
       }
       else {
        return false;
      }
    }
    this.nextPage = function(){ 
      if(current_page < numPages()-1) {
        pageSelected(current_page+1);
       return true;
      }
      else {
        return false;
       }
    }
    // 所有初始化完成,绘制链接
   drawLinks();
     // 回调函数
     //opts.callback(current_page, this);
  });
}

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

样式代码:

.pages {display: inline-block; overflow: hidden;padding: 15px 0;text-align: center; width:100%; margin:50px 0;}
 .pages b{ color:#e75f49;}
 .pages a { color:#666; border: 1px solid #e5e5e5;cursor: pointer;font-size: 12px;margin-right: 5px; padding: 8px 12px; text-decoration: none; background-color:#fafafa;}
 .pages .currentPage{ background-color: #00a0e9; border: 1px solid #00a0e9;color: #fff; font-weight: bold;}

显示效果如下:

 jQuery+Ajax实现无刷新分页

原来的css样式:

.pagination a {
 text-decoration: none;
  border: 1px solid #AAE;
  color: #15B;
 }
 .pagination a, .pagination span {
  display: inline-block;
 padding: 0.1em 0.4em;
  margin-right: 5px;
 margin-bottom: 5px;
 }
 
.pagination .current {
 background: #26B;
 color: #fff;
 border: 1px solid #AAE;
 }
 .pagination .current.prev, .pagination .current.next{
  color:#999;
  border-color:#999;
  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 相关文章推荐
Javascript 遍历对象中的子对象
Jul 03 Javascript
JavaScript中的变量声明早于赋值分析
Mar 01 Javascript
Javascript字符串对象的常用方法简明版
Jun 26 Javascript
基于jquery实现的自动补全功能
Mar 12 Javascript
js实现交换运动效果的方法
Apr 10 Javascript
日常收集整理的JavaScript常用函数方法
Dec 10 Javascript
第一次接触神奇的Bootstrap基础排版
Jul 26 Javascript
微信小程序 location API实例详解
Oct 02 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
Nov 03 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 Javascript
js中null与空字符串&quot;&quot;的区别讲解
Jan 17 Javascript
浅谈Ant Design Pro 菜单自定义 icon
Nov 17 Javascript
JavaScript中的定时器之Item23的合理使用
Oct 30 #Javascript
javascript字符串替换函数如何一次性全部替换掉
Oct 30 #Javascript
JS实现带提示的星级评分效果完整实例
Oct 30 #Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
Oct 30 #Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
Oct 30 #Javascript
基于jQuery实现的美观星级评论打分组件代码
Oct 30 #Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
Oct 30 #Javascript
You might like
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
有关php运算符的知识大全
2011/11/03 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
thinkphp制作404跳转页的简单实现方法
2016/09/22 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
Add a Formatted Table to a Word Document
2007/06/15 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
2011/11/05 Javascript
Js如何判断客户端是PC还是手持设备简单分析
2012/11/22 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
Vue组件化通讯的实例代码
2017/06/23 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
9102年webpack4搭建vue项目的方法步骤
2019/02/20 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
Python类的基础入门知识
2008/11/24 Python
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
详解Python_shutil模块
2019/03/15 Python
python连接、操作mongodb数据库的方法实例详解
2019/09/11 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
python实现移动木板小游戏
2020/10/09 Python
Python Selenium库的基本使用教程
2021/01/04 Python
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
通用C#笔试题附答案
2016/11/26 面试题
新闻传媒系求职信范文
2014/04/19 职场文书
2014年材料员工作总结
2014/11/19 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
社区植树节活动总结
2015/02/06 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏