JavaScript简单分页,兼容IE6,~3KB
简介
兼容IE6+及现代浏览器的简单分页,支持同一页面多个分页。
使用
Browser
<link rel="stylesheet" href="css/GB-paging.css">
<script src="js/GB-paging.js"></script>
普通分页
HTML
<div id="gbpaging" class="gb-paging">
JS
gbPaging({
total: 101,
paramName: 'p',
curPage: getPage('p', '#'),
size: 5,
prevText: '<',
nextText: '>',
pageInfo: '<b>{{currentPage}}</b>/<b>{{totalPages}}</b>',
eventType: 'click'
});
同页面另一个分页
HTML
<div id="paging1" class="gb-paging"></div>
JS
gbPaging({
eleId: 'paging1',
total: 54,
size: 10,
prevText: false,
nextText: false,
paramName: 'p1',
curPage: getPage('p1', '#'),
pageInfo: false,
eventType: 'click'
});
刷新带参数
HTML
<div id="paging2" class="gb-paging"></div>
JS
gbPaging({
eleId: 'paging2',
total: 2500,
paramName: 'page',
curPage: getPage('page', '?type=1&name=2&'),
goUrl: '?type=1&name=2&{{n}}'
});
辅助函数
function getPage(pname, other){
var page = window.location.search.replace( other + pname + '=', '') || 1;
return parseInt(page);
}
选项
eleId分页容器,仅支持ID,默认为: 'gbpaging'total: 总记录数paramName: 分页参数名 || 'p'curPage: 当前页码size: 每页记录数 || 10prevText: 上一页文案 || '上一页',值为 false 不显示nextText: '下一页文案 || '下一页' 值为 false 不显示pageInfo: 分页信息,{{currentPage}}当前页码,{{totalPages}}总页数 || 当前第{{currentPage}}页/共{{totalPages}}页,值为 false 不显示eventType: 事件方式,'click' || 'link'goUrl: 链接URL,'?type=1&name=2&{{n}}' || '',{{n}}为分页参数名+值,如:'p=1'
DEMO
http://blog.givebest.cn/GB-paging.html
Github
https://github.com/givebest/GB-paging
完整代码
/**
* GB-paging.js
* @class gbPaging
* @see https://github.com/givebest/GB-paging
* @author givenlovs@msn.com
* @(c) 2016
**/
(function() {
var $,
defaultConfig,
paging = null,
args;
/**
* [defaultConfig 默认配置]
* @type {Object}
*/
defaultConfig = {
eventType: 'link',
curPage: 1, //当前页
size: 10, //每页n条
paramName: 'p', //页码参数
prevText: '上一页',
nextText: '下一页',
pageInfo: '当前第<b>{{currentPage}}</b>页/共<b>{{totalPages}}</b>页'
}
/**
* [$ description]
* @param {String} id
* @return {Object} HTML [HTML element]
*/
$ = function(id) {
return document.getElementById(id);
}
function GbPaging() {
if (!(this instanceof GbPaging)) return new GbPaging();
}
GbPaging.prototype.init = function(opts) {
this.getParams(opts);
this.build();
this.events();
}
GbPaging.prototype.getParams = function(opts) {
args = this.opts = opts || {};
// _this = this;
if ($(args.eleId)) {
args.container = $(args.eleId);
} else if ($('gbpaging')) {
args.container = $('gbpaging');
} else {
return;
}
args.eventType = args.eventType || defaultConfig.eventType;
args.total = args.total || 0;
args.curPage = args.curPage || defaultConfig.curPage;
args.size = args.size || defaultConfig.size;
args.paramName = args.paramName || defaultConfig.paramName;
args.goUrl = args.goUrl || '';
args.pages = Math.ceil(args.total / args.size || 0);
args.isPrev = (args.prevText !== false) ? true : false;
args.prevText = args.prevText || defaultConfig.prevText;
args.isNext = (args.nextText !== false) ? true : false;
args.nextText = args.nextText || defaultConfig.nextText;
args.isPageInfo = (args.pageInfo !== false) ? true : false;
args.pageInfo = args.pageInfo || defaultConfig.pageInfo;
}
/**
* [分页html]
* @return {[type]} [description]
*/
GbPaging.prototype.build = function() {
var html = [];
// console.log('build', args)
// 没有数据
if (args.pages <= 1) {
addClass(args.container, 'gb-hide');
return;
}
if (args.curPage >>> 0 <= 0) return;
var ii = (args.curPage == 1 || args.curPage == args.pages) ? 3 : 2;
var urlParam = parseUrl(args.goUrl, args.paramName);
html.push('<a href="'+ urlParam + args.curPage +'" class="gb-paging-current">' + args.curPage + '</a>');
for (var i = 1; i < ii; i++) {
if (args.curPage - i > 1) {
html.unshift('<a href="'+ urlParam + (args.curPage - i) +'">' + (args.curPage - i) + '</a>');
}
if (args.curPage + i < args.pages) {
html.push('<a href="'+ urlParam + (args.curPage + i) +'">' + (args.curPage + i) + '</a>');
}
}
if (args.curPage - 2 > 1) {
html.unshift('<span class="gb-paging-ellipsis">...</span>');
}
if (args.curPage > 1) {
html.unshift('<a href="'+ urlParam +'1">1</a>');
args.isPrev && html.unshift('<a href="'+ urlParam + (args.curPage - 1) +'">' + args.prevText + '</a>');
} else {
args.isPrev && html.unshift('<a class="disabled">' + args.prevText + '</a>');
}
if (args.curPage + 2 < args.pages) {
html.push('<span class="gb-paging-ellipsis">...</span>');
}
if (args.curPage < args.pages) {
html.push('<a href="'+ urlParam + args.pages +'">' + args.pages + '</a>');
args.isNext && html.push('<a href="'+ urlParam + (args.curPage + 1) +'">' + args.nextText + '</a>');
} else {
args.isNext && html.push('<a class="disabled">' + args.nextText + '</a>');
}
// 是否显示右侧分页信息
if (args.isPageInfo) html.push('<div class="gb-paging-info">' + args.pageInfo.replace('{{currentPage}}', args.curPage).replace('{{totalPages}}', args.pages) + '</div>');
args.container.innerHTML = html.join('');
}
/**
* [绑定事件]
* @return {[type]} [description]
*/
GbPaging.prototype.events = function() {
var _this = this;
if (args.eventType !== 'click') return;
bind(args.container, 'click', function(e) {
e = e || window.event;
e.preventDefault ? e.preventDefault() : e.returnValue = false;
args = _this.opts;
// console.log('events', _this.opts);
var target = e.target || e.srcElement;
if (target.tagName.toLowerCase() === 'a' && !hasClass(target, 'disabled')) {
args.curPage = target.getAttribute('href').replace(parseUrl(args.goUrl, args.paramName), '');
if (args.curPage >>> 0 === 0) args.curPage = args.curPage.replace(window.location.href, '');
args.curPage = parseInt(args.curPage);
_this.build();
}
});
}
/**
* [解释URL]
* @param {[String]} url [description]
* @param {[String]} param [description]
* @return {[String]} [description]
*/
function parseUrl(url, param) {
if (url) {
return url.replace('{{n}}', param + '=');
} else {
return '#' + param + '=';
}
}
/**
* Bind events to elements
* @param {Object} ele HTML Object
* @param {Event} event Event to detach
* @param {Function} fn Callback function
*/
function bind(ele, event, fn) {
if (typeof addEventListener === 'function') {
ele.addEventListener(event, fn, false);
} else if (ele.attachEvent) {
ele.attachEvent('on' + event, fn);
}
}
/**
* Unbind events to elements
* @param {Object} ele HTML Object
* @param {Event} event Event to detach
* @param {Function} fn Callback function
*/
/* function unbind(ele, event, fn) {
if (typeof removeEventListener === 'function') {
ele.removeEventListener(event, fn, false);
} else if (ele.detachEvent) {
ele.detach('on' + event, fn);
}
}*/
/**
* hasClass
* @param {Object} ele HTML Object
* @param {String} cls className
* @return {Boolean}
*/
function hasClass(ele, cls) {
if (!ele || !cls) return false;
if (ele.classList) {
return ele.classList.contains(cls);
} else {
return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
}
}
/**
* [addClass description]
* @param {Object} ele [HTML Object]
* @param {String} cls [className]
*/
function addClass(ele, cls) {
if (ele.classList) {
ele.classList.add(cls);
} else {
if (!hasClass(ele, cls)) ele.className += '' + cls;
}
}
/**
* [removeClass description]
* @param {Object} ele [HTML Object]
* @param {String} cls [className]
*/
/* function removeClass(ele, cls) {
if (ele.classList) {
ele.classList.remove(cls);
} else {
ele.className = ele.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
}
}*/
if (window.gbPaging === undefined) {
window.gbPaging = function (opts) {
paging = GbPaging();
return paging.init(opts);
}
}
// AMD (@see https://github.com/jashkenas/underscore/blob/master/underscore.js)
if (typeof define == 'function' && define.amd) {
define('GB-paging', [], function() {
return gbPaging;
});
}
}());
JavaScript简单分页,兼容IE6,~3KB的更多相关文章
- 表单美化-原生javascript和jQuery多选按钮(兼容IE6)
前些天我们讲了下单选按钮的美化今天来做表单元素多选按钮的美化.我们的想法是:利用多选按钮是否被选中和是否不给选择的特性来为按钮的父元素添加对应的样式,就是说用什么的样式是由按钮的状态来决定. 用到的图 ...
- PNG兼容IE6解决方法
虽然说现在早就不用ie6浏览器了,可以还是有一小部分还在使用 ,刚好公司也有要求~~~ <p> E6不兼容png图片,确实让网页的图片质量大大下降,为了兼容万恶的IE6,总结了下面几种方法 ...
- div+css 布局下兼容IE6 IE7 FF常见问题
div+css 布局下兼容IE6 IE7 FF常见问题 收藏 所有浏览器 通用 (市面上主要用到的IE6 IE7 FF)height: 100px; IE6 专用 _height: 100px; IE ...
- jQuery&CSS 顶部和底部固定浮动工具栏 兼容IE6
http://www.cnblogs.com/lhj588/archive/2013/04/02/2994639.html —————————————————————————————————————— ...
- 兼容IE6\7\8浏览器的html5标签的几个方案
html5大行其道的时代已经到来.如果你还在等待浏览器兼容,说明你已经与web脱节几条街了.当然,这得益于移动客户端的蓬勃发展.如果还在纠结于,是否应该掌握html5和css3技术时,请狠狠的抽自己几 ...
- html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器
以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上 ...
- html5标签兼容ie6,7,8
注册博客园已经三年了,这三年一直在忙,没时间写博文.也许是忙,也许是懒吧!当然这三年发生了很多事,我也从开发人员转变为前端人员. 是时候对所学的,所用的知识做一下沉淀了.就从这一篇开始吧! html5 ...
- 使用Vs2005打造简单分页浏览器(1)原创
原文:使用Vs2005打造简单分页浏览器(1)原创 使用Vs2005打造简单分页浏览器(1)原创1引言2功能3实现过程以及关键点4总结5不足之处6其他7 代码下载 1 引言很早就有搞一个浏览器的 ...
- 原生JS编写兼容IE6,7,8浏览器无缝自动轮播(带按钮切换)
项目要求页面兼容IE6,7,8等浏览器,我们可能会遇到这个轮播效果,轮播板块要求:无限循环.自动轮播和手动切换功能,每一次滚动一小格,网上有很多这类插件,例如:swiper等! 但是很多都是不兼容IE ...
随机推荐
- [Top-Down Approach]Take Notes
Computer Networking - A Top-Down Approach Six Edition Learn HTTP Using Browser and Proxy 2016-03-20 ...
- Linux.NET学习手记(7)
前一篇中,我们简单的讲述了下如何在Linux.NET中部署第一个ASP.NET MVC 5.0的程序.而目前微软已经提出OWIN并致力于发展VNext,接下来系列中,我们将会向OWIN方向转战. 早在 ...
- docker创建私有仓库
由于网速和大中华局域网效果,使得我们在DockerHub下载镜像的速度很慢,甚至一些国内的镜像仓库,也感觉速度不是很好.所以,很有必要在本地或者一个我们访问很快速的地方(自己的云服务器)搭建一套镜像仓 ...
- [APUE]不用fcntl实现dup2函数功能
dup2的函数定义为: #include <unistd.h> int dup2(int src_fd, int new_fd); 自己实现dup2函数有几个关键点: 1,检查给定的源fd ...
- Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉
Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉 1.1. 按照当前流行的分类方法,可以分为以下三部分:三部分 图像处理 图像分析 计算机视觉1 1.2. 图像处理需要 ...
- ERROR ITMS-90167: "No .app bundles found in the package"错误
ERROR ITMS-90167: "No .app bundles found in the package" 出现如上错误请查检以下2个方向: 1.macOS Sierra 1 ...
- SQL Server中TOP子句可能导致的问题以及解决办法
简介 在SQL Server中,针对复杂查询使用TOP子句可能会出现对性能的影响,这种影响可能是好的影响,也可能是坏的影响,针对不同的情况有不同的可能性. 关系数据库中SQL语句只 ...
- 微软Ignite大会我的Session(SQL Server 2014 升级面面谈)PPT分享
我在首届微软技术大会的Session分享了一个关于SQL Server升级的主题,现在将PPT分享出来. 您可以点击这里下载PPT. 也非常感谢微软中国邀请我进行这次分享.
- 火狐浏览器中event不起作用解决办法--记录(一)
今天遇到了这个问题.IE,谷歌下都没问题,但在FF下却不起作用,很郁闷查了半天,看别人博文写了老长,结果试了要么起作用,但太麻烦,要么不起作用,说了那么多跟没说一样. 其实只要这一句代码就行:e=ar ...
- OPEN CASCADE编译视频
为了帮助OPEN CASCADE新手顺利编译OPEN CASCADE源码,特录制了一个视频, 有了这个视频,OPEN CASCADE的编译再也不麻烦啦!