很久没更新文章了,最近项目需要使用前端来做分页,于是找了一款现有的jquery分页插件进行修改了一下,增加了些新功能以及加大了兼容性,其本质其实就是使用$.ajax()方法进行包装,把修改过后的代码贴出来给大家吧(末尾提供下载)

/*

* Version 1.0

* 2015-12-20 by sullivan

* AJAX Pager

*/

/// 辅助方法:格式化字符串

window.stringFormat = function() {

if (arguments.length == 0)

return null;

var str = arguments[0];

for (var i = 1; i < arguments.length; i++) {

var reg = new RegExp('\\{' + (i - 1) + '\\}', 'gm');

str = str.replace(reg, arguments[i]);

}

return str;

}

/// parseURL

window.parseURL = function(url) {

var a = document.createElement('a');

a.href = url;

return {

source: url,

protocol: a.protocol.replace(':', ''),

host: a.hostname,

port: a.port,

query: a.search,

params: (function () {

var ret = {},

seg = a.search.replace(/^\?/, '').split('&'),

len = seg.length, i = 0, s;

for (; i < len; i++) {

if (!seg[i]) { continue; }

s = seg[i].split('=');

ret[s[0]] = s[1];

}

return ret;

})(),

file: (a.pathname.match(/\/([^\/?#]+)$/i) || [, ''])[1],

hash: a.hash.replace('#', ''),

path: a.pathname.replace(/^([^\/])/, '/$1'),

relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, ''])[1],

segments: a.pathname.replace(/^\//, '').split('/')

};

}

;

(function (window, $) {

var ajaxPagerObj = window.ajaxPagerObj = {

opts: {

pageSize: 10,

preText: "上一页",

nextText: "下一页",

firstText: "首页",

lastText: "尾页",

shiftingLeft: 3,

shiftingRight: 3,

preLeast: 2,

nextLeast: 2,

showFirst: true,

showLast: true,

url: "",

type: "POST",

dataType: "JSON",

data: {},

doPage:function(data){

if(!data.pageIndex || !data.pageSize){

//用于页码字段同步,比如:

alert("请在doPage方法里将页码与页长字段同步!,例如:\ndata.Page=data.pageIndex;\ndata.PageSize=data.pageSize;");

console.log("请在doPage方法里将页码与页长字段同步!,例如:\ndata.Page=data.pageIndex;\ndata.PageSize=data.pageSize;");

//data.Page=data.pageIndex;

//data.PageSize=data.pageSize;

}

},

beforeSend: function(){},

success: function(data){},

complete: function(){},

error: function() {

alert("抱歉,请求出错,请重新请求!");

},

pageIndex: 1,

totalCount: 0,

totalPage: 0

},

pagerElement: null,

commonHtmlText: {

spanHtml: "{1}",

pageIndexHtml: "{3}",

rightHtml: "   共 {0} 页, 到第 页 确定",

clearFloatHtml: "

stringEmpty: ""

},

init: function (obj,op) {

var _self = this;

_self.opts = $.extend({}, _self.opts, op || {});

_self.pagerElement = obj;

_self.doPage(_self.opts.pageIndex, _self.opts.pageSize, _self.opts.data);

return _self.opts;

},

doPage: function (index, pageSize, data) {

var _self = this;

var dataJson=$.extend(data || {}, {pageIndex: index,pageSize:pageSize || 10})

if(typeof _self.opts.doPage=="function"){

_self.opts.doPage(dataJson);

}

_self.opts.pageIndex=index;

_self.opts.pageSize=pageSize;

_self.opts.data=data;

var returnRequest = $.ajax({

type: _self.opts.type,

data:dataJson ,

dataType: _self.opts.dataType,

url: _self.opts.url,

beforeSend: function (xhr) {

if(returnRequest){

returnRequest.abort();

}

if(typeof _self.opts.beforeSend=="function"){

_self.opts.beforeSend(xhr);

}

},

error: function (XMLHttpRequest, textStatus, errorThrown) {

if(typeof _self.opts.error=="function"){

_self.opts.error(XMLHttpRequest, textStatus, errorThrown);

}

},

success: function (data) {

if(typeof _self.opts.success=="function"){

_self.opts.success(data);

//后台返回数据格式:{"total":0,"items":[]}

_self.opts.totalCount =_self.getTotalCount(_self.opts) || data.TotalCount || _self.opts.totalCount;

_self.getTotalPage();

if (_self.opts.totalCount > 0 && _self.opts.pageIndex > 0) {

var pageTextArr = new Array;

_self.createPreAndFirstBtn(pageTextArr);

_self.createIndexBtn(pageTextArr);

_self.createNextAndLastBtn(pageTextArr);

_self.renderHtml(pageTextArr);

}

}

},

complete: function (data) {

if(typeof _self.opts.complete=="function"){

_self.opts.complete(data);

}

}

});

},

getTotalPage: function() {

var _self = this;

_self.opts.totalPage = Math.ceil(_self.opts.totalCount / _self.opts.pageSize);

},

getTotalCount: function(opts) {

var _self = this;

return '';

},

createPreAndFirstBtn: function (pageTextArr) {

var _self = this;

if (_self.opts.pageIndex == 1) {

if (_self.opts.showFirst)

pageTextArr.push(_self.createSpan(_self.opts.firstText, 'disenable'));

pageTextArr.push(_self.createSpan(_self.opts.preText, 'disenable'));

} else {

if (_self.opts.showFirst) {

pageTextArr.push(_self.createIndexText(1, _self.opts.firstText));

}

pageTextArr.push(_self.createIndexText(_self.opts.pageIndex - 1, _self.opts.preText));

}

},

createNextAndLastBtn: function (pageTextArr) {

var _self = this;

if (_self.opts.pageIndex == _self.opts.totalPage) {

pageTextArr.push(_self.createSpan(_self.opts.nextText, 'disenable'));

if (_self.opts.showLast)

pageTextArr.push(_self.createSpan(_self.opts.lastText, 'disenable'));

} else {

pageTextArr.push(_self.createIndexText(_self.opts.pageIndex + 1, _self.opts.nextText));

if (_self.opts.showLast)

pageTextArr.push(_self.createIndexText(_self.opts.totalPage, _self.opts.lastText));

}

},

createIndexBtn: function (pageTextArr) {

/*

前:当前页 > 偏移量 + 至少保留 + 1

后:当前页 < 总页码 - 偏移量 - 至少保留

*/

var _self = this;

var shiftingLeftStart = _self.opts.shiftingLeft + _self.opts.preLeast + 1;

var shiftingRightStart = _self.opts.totalPage - _self.opts.shiftingRight - _self.opts.nextLeast - 1;

/*页码*/

if (_self.opts.pageIndex > shiftingLeftStart) {

for (i = 1; i <= _self.opts.preLeast; i++) {

pageTextArr.push(_self.createIndexText(i, i));

}

pageTextArr.push(_self.createSpan('...'));

for (i = _self.opts.pageIndex - _self.opts.shiftingLeft; i < _self.opts.pageIndex; i++) {

pageTextArr.push(_self.createIndexText(i, i));

}

} else {

for (i = 1; i < _self.opts.pageIndex; i++) {

pageTextArr.push(_self.createIndexText(i, i));

}

}

pageTextArr.push(_self.createSpan(_self.opts.pageIndex, 'current'));

if (_self.opts.pageIndex <= shiftingRightStart) {

for (i = _self.opts.pageIndex + 1; i < _self.opts.pageIndex + 1 + _self.opts.shiftingRight; i++) {

pageTextArr.push(_self.createIndexText(i, i));

}

pageTextArr.push(_self.createSpan('...'));

for (i = _self.opts.totalPage - 1; i <= _self.opts.totalPage; i++) {

pageTextArr.push(_self.createIndexText(i, i));

}

} else {

for (i = _self.opts.pageIndex + 1; i <= _self.opts.totalPage; i++) {

pageTextArr.push(_self.createIndexText(i, i));

}

}

},

renderHtml: function (pageTextArr) {

var _self = this;

var pageText = _self.commonHtmlText.stringEmpty;

for (var i = 0; i < pageTextArr.length; i++) {

pageText += pageTextArr[i];

}

_self.pagerElement.html(pageText).append(stringFormat(_self.commonHtmlText.rightHtml, _self.opts.totalPage, _self.opts.pageIndex)).append(_self.commonHtmlText.clearFloatHtml);

},

createSpan: function (text, className) {

var _self = this;

return stringFormat(_self.commonHtmlText.spanHtml, className ? className : _self.commonHtmlText.stringEmpty, text);

},

createIndexText: function (index, text) {

var _self = this;

return stringFormat(_self.commonHtmlText.pageIndexHtml, index, _self.opts.pageSize, JSON.stringify(_self.opts.data), text);

},

jumpToPage: function() {

var _self = this;

var $txtToPager = $("#txtToPager", _self.pagerElement);

var index = parseInt($txtToPager.val());

if (!isNaN(index) && index > 0 && index <= _self.opts.totalPage) {

_self.doPage(index, _self.opts.pageSize, _self.opts.data);

} else {

$txtToPager.focus();

}

}

}

$.fn.ajaxPager = function (option) {

return ajaxPagerObj.init($(this),option);

};

})(window, jQuery);

参考样式

/**pager**/

.ajaxPager-box {

display:inline-block;

padding: 0px 10px;

text-align:center;

font-size:0;

}

.ajaxPager-box span {

display: block;

float: left;

padding: 1px 12px;

margin-right: 4px;

font-size:12px;

}

.ajaxPager-box span.current {

background-color: #eb6906;

color: #FFF;

border: solid 1px #DDD;

}

.ajaxPager-box span.disenable {

color: #CECECE;

background-color: #FFF;

border: solid 1px #DDD;

}

.ajaxPager-box span.text {

padding: 1px 8px;

color: #333;

}

.ajaxPager-box a {

display: block;

float: left;

padding: 1px 12px;

margin-right: 4px;

text-decoration: none;

border: solid 1px #DDD;

color: #666 !important;

font-size:12px;

}

.ajaxPager-box a:active,

.ajaxPager-box a:visited,

.ajaxPager-box a:focus,

.ajaxPager-box a:hover{

border: solid 1px #eb6906;

color: #eb6906 !important;

}

.ajaxPager-box input[type=text] {

padding:0;

border: solid 1px #DDD;

width: 30px;

height: 20px;

line-height: 20px;

float: left;

margin-right: 4px;

margin-bottom:0;

text-align: center;

border-radius:0;

font-size:12px;

color:#555;

}

.ajaxPager-box button {

cursor: pointer;

border: solid 1px #DDD;

height: 22px;

line-height: 20px;

float: left;

margin:1px 0 0 4px;

padding: 1px 12px;

color: #666;

background-color:#EFEFEF;

font-size:12px;

}

.ajaxPager-box button:active,

.ajaxPager-box button:visited,

.ajaxPager-box button:focus,

.ajaxPager-box button:hover{

border: solid 1px #eb6906 !important;

color: #eb6906 !important;

outline:none;

}

html分页插件大全,前端jquery分页插件推荐相关推荐

  1. 前端jquery日期插件

    分享一个前端jquery日期插件,方便自己后面需要时查找使用. 效果: 1.html demo. <!DOCTYPE html> <html lang="en"& ...

  2. jquery 封装幻灯插件_21个jQuery幻灯片插件

    jquery 封装幻灯插件 21 jQuery Slideshow plugins 21个jQuery幻灯片插件 In today`s article I collected most attract ...

  3. php 智能输入提示插件,PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能_php实例...

    我们在很多项目中使用了搜索功能来帮助用户更快更准确的找到想要的信息.本文将介绍如何实现用户输入自动提示的功能,就像谷歌百度搜索引擎一样,当用户输入关键字时,输入框下方会有提示,将与关键字相关的信息展现 ...

  4. html5ify插件,漂亮的jQuery对话框插件Dialogify

    这是一款jQuery对话框插件.该对话框插件使用dialog元素和 HTMLDialogElement API来制作对话框, 可以生成漂亮的对话框效果. 使用方法 在页面中引入jquery和dialo ...

  5. 前端关系图谱插件_js前端使用jOrgChart插件实现组织架构图的展示

    一.说明 (1)通过后台查询数据库,生成树形数组结构,返回到前台. (2)需要引入的js插件和css文件: ①jquery.jOrgChart.css ②jquery.min.js ③jquery.j ...

  6. 织梦插件-织梦插件大全-免费织梦插件大全

    织梦插件多吗?谁有织梦全套插件,织梦cms是一个独立的网站程序.今天给大家推荐的是织梦模板(内置5W套织梦cms织梦模板)以及免费织梦插件大全其中包括有:织梦cms采集插件.织梦cms伪原创插件.织梦 ...

  7. jquery视频插件_10个jQuery视频插件

    jquery视频插件 10个很棒的jQuery视频插件 ,可以帮助轻松地从您喜欢的网站流式传输视频. 使用这10个jQuery视频插件以样式显示视频和视频场景. 请享用! :) 视频库WordPres ...

  8. html5常用插件大全,前端常用插件utils汇总

    发布于 2020-03-06 工具库 || 数据处理 表单验证---jquery 图片懒加载---JavaScript---vue---react 图片预览类似朋友圈满足聊天递增图片的需求---vue ...

  9. php bootstraptable分页,php+bootstrap+dataTable+jquery分页列表

    $(document).ready(function(){ $("#table_local").dataTable({ "bSort":true, " ...

最新文章

  1. Linux突然连不上网,ping不通百度,连不上MobaXterm
  2. 用js参数实现模板替换机制
  3. Vitis学习记录(三)
  4. mac使用Shell(终端)SSH连接远程服务器
  5. IntelliJ IDEA类注释模板设置
  6. tfs 文件系统部署_使用SQL Server数据工具和使用自定义工作流文件的TFS部署到多个数据库
  7. R语言︱H2o深度学习的一些R语言实践——H2o包
  8. 全套思源黑体合集(含ttf/ttc版/行高修正版)
  9. 使用虚幻4进行安卓打包
  10. STM32单片机驱动步进电机—简单篇
  11. Java 拾遗补阙 ----- 继承私有属性
  12. 【CSS3盒子模型新样式】boder-box
  13. MAC里“微软雅黑”字体标准体和粗体无法同时使用问题的解决方法
  14. 这5个是不是元宇宙游戏遗珠?
  15. 马云谈加班、996看法
  16. 教你自己训练的pytorch模型转caffe(二)
  17. 桌面天气秀 3.6 正式版
  18. 【JavaSE】自定义异常
  19. WDS+MDT部署Windows7操作系统2—;导入启动映像和安装映像
  20. SetTexture()

热门文章

  1. EasyCVR快照跟视频流的关系是什么?快照生成具备何种机制?
  2. linux修改密码报错‘Authentication token manipulation error‘
  3. 学生档案管理系统(c++)代码实现
  4. 安卓最新系统_三星S9+升级最新系统ONE UI体验,安卓9.0带来哪些惊喜?
  5. c语言指针的强制类型转换,c语言指针的强制转换
  6. C语言基础:强制类型转换
  7. 数智学习|《企业数字化转型白皮书(2021)》解读
  8. javaScript作用域提升
  9. 基于JavaSwing+MySQL实现的奶茶饮品销售管理系统
  10. 【微信小程序|组件库】自定义swiper组件