简介
兼容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: 每页记录数 || 10
prevText: 上一页文案 || '上一页',值为 false 不显示
nextText: '下一页文案 || '下一页' 值为 false 不显示
pageInfo: 分页信息,{{currentPage}}当前页码,{{totalPages}}总页数 || 当前第{{currentPage}}页/共{{totalPages}}页,值为 false 不显示
eventType: 事件方式,'click' || 'link'
goUrl: 链接URL,'?type=1&name=2&{{n}}' || '',{{n}}为分页参数名+值,如:'p=1'
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; }); } }());
本文向大家介绍Java简单实现SpringMVC+MyBatis分页插件,包括了Java简单实现SpringMVC+MyBatis分页插件的使用技巧和注意事项,需要的朋友参考一下 1.封装分页Page类 2.封装分页插件 3.MyBatis配置文件:mybatis-config.xml 4.分页拦截器 5.Spring配置 6.SpringMVC配置拦截器
本文向大家介绍Jquery日历插件制作简单日历,包括了Jquery日历插件制作简单日历的使用技巧和注意事项,需要的朋友参考一下 在页面开发中,经常遇到需要用户输入日期的操作。通常的做法是,提供一个文本框(text),让用户输入,然后,编写代码验证输入的数据,检测其是否是日期类型。这样比较麻烦,同时,用户输入日期的操作也不是很方便,影响用户体验。如果使用jQuery UI中的datepicker(日
本文向大家介绍Python制作简单的网页爬虫,包括了Python制作简单的网页爬虫的使用技巧和注意事项,需要的朋友参考一下 1.准备工作: 工欲善其事必先利其器,因此我们有必要在进行Coding前先配置一个适合我们自己的开发环境,我搭建的开发环境是: 操作系统:Ubuntu 14.04 LTS Python版本:2.7.6 代码编辑器:Sublime Text 3.0 这次的网络爬虫需求背景我打算
本文向大家介绍mybatis分页插件pageHelper详解及简单实例,包括了mybatis分页插件pageHelper详解及简单实例的使用技巧和注意事项,需要的朋友参考一下 mybatis分页插件pageHelper详解及简单实例 工作的框架spring springmvc mybatis3 首先使用分页插件必须先引入maven依赖,在pom.xml中添加如下 其次需要在配置文件中添加配置,有两
问题内容: 我正在使用下面的循环+ jQuery在下一组页面中加载,并且在第一次单击时有效,但是当加载下一页并单击“较新的帖子”时,它将重新加载整个页面。有任何想法吗? 问题答案: 您正在使用jQuery的方法插入内容,这是的快捷方式,当然可以动态地插入内容。 动态内容需要将事件委派给非动态父对象,而jQuery可以轻松实现
本文向大家介绍简单实现jsp分页,包括了简单实现jsp分页的使用技巧和注意事项,需要的朋友参考一下 数据分页,在开发中必不可少,由于数据量太大,不得不进行处理。但是对于分页,又有很多种方式,比如使用sql语句的limit,或者使用jquery的插件。但是底层的逻辑,都是需要的。 在这里贴出bean对象的代码,以及一个辅助类。我做的这个项目是一个个人博客,算是个人网站吧。 (只贴部分底层逻辑代码)
本文向大家介绍javascript实现二级级联菜单的简单制作,包括了javascript实现二级级联菜单的简单制作的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了javascript实现二级级联菜单的简单制作方法。分享给大家供大家参考。具体如下: 运行效果截图如下: 具体代码如下: 希望本文所述对大家学习javascript程序设计有所帮助。
本文向大家介绍.NET分页控件简单学习,包括了.NET分页控件简单学习的使用技巧和注意事项,需要的朋友参考一下 这几天无意间看到一个关于分页的帖子,觉得写得挺好的。关于这些东西,自己一直都是只知道原理,却没有真正动手做过,于是研究了一下分页的原理自己动手写了一个十分特别非常简单的分页程序,在这里与大家分享一下。 这个程序取数据使用的ado.net,首先先新建一个取数据的类PageDAl 然后记