JavaScript简单分页,兼容IE6,~3KB

GB-Paging是一款兼容IE6+及现代浏览器的简单分页插件,支持在同一页面中使用多个分页实例,提供了丰富的配置选项以适应不同的场景需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

兼容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'

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;
          });
        }

    }());

转载请注明:https://segmentfault.com/a/1190000006878074

/* * @(#)PageControl.java 1.00 2004-9-22 * * Copyright 2004 2004 . All rights reserved. * PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package com.hexiang.utils; /** * PageControl, 分页控制, 可以判断总页数和是否有上下页. * * 2008-07-22 加入输出上下分页HTML代码功能 * * @author HX * @version 1.1 2008-9-22 */ public class PageBean { /** 每页显示记录数 */ private int pageCount; /** 是否有上一页 */ private boolean hasPrevPage; /** 记录总数 */ private int recordCount; /** 是否有下一页 */ private boolean hasNextPage; /**总页面数 */ private int totalPage; /** 当前页码数 */ private int currentPage; /** * 分页前的页面地址 */ private String pageUrl; /** * 输出分页 HTML 页面跳转代码, 分链接和静态文字两种. * 2008-07-22 * @return HTML 代码 */ public String getPageJumpLinkHtml() { if(StringUtil.isEmpty(pageUrl)) { return ""; } // 检查是否有参数符号, 没有就加上一个? if(pageUrl.indexOf(&#39;?&#39;) == -1) { pageUrl = pageUrl + &#39;?&#39;; } StringBuffer buff = new StringBuffer("<span id=&#39;pageText&#39;>"); // 上一页翻页标记 if(currentPage > 1) { buff.append("[ <a href=&#39;" + pageUrl + "&page=" + (currentPage - 1) + "&#39; title=&#39;转到第 " + (currentPage - 1) + " 页&#39;>上一页</a> ] "); } else { buff.append("[ 上一页 ] "); } // 下一页翻页标记 if(currentPage < getTotalPage()) { buff.append("[ <a href=&#39;" + pageUrl + "&page=" + (currentPage + 1)+ "&#39; title=&#39;转到第 " + (currentPage + 1) + " 页&#39;>下一页</a> ] "); } else { buff.append("[ 下一页 ] "); } buff.append("</span>"); return buff.toString(); } /** * 输出页码信息: 第${currentPage}页/共${totalPage}页 * @return */ public String getPageCountHtml() { return "第" + currentPage + "页/共" + getTotalPage() + "页"; } /** * 输出 JavaScript 跳转函数代码 * @return */ public String getJavaScriptJumpCode() { if(StringUtil.isEmpty(pageUrl)) { return ""; } // 检查是否有参数符号, 没有就加上一个? if(pageUrl.indexOf("?") == -1) { pageUrl = pageUrl + &#39;?&#39;; } return "<script>" + "// 页面跳转函数\n" + "// 参数: 包含页码的表单元素,例如输入框,下拉框等\n" + "function jumpPage(input) {\n" + " // 页码相同就不做跳转\n" + " if(input.value == " + currentPage + ") {" + " return;\n" + " }" + " var newUrl = &#39;" + pageUrl + "&page=&#39; + input.value;\n" + " document.location = newUrl;\n" + " }\n" + " </script>"; } /** * 输出页面跳转的选择框和输入框. 示例输出: * <pre> 转到 <!-- 输出 HTML SELECT 元素, 并选中当前页面编码 --> <select onchange=&#39;jumpPage(this);&#39;> <c:forEach var="i" begin="1" end="${totalPage}"> <option value="${i}" <c:if test="${currentPage == i}"> selected </c:if> >第${i}页</option> </c:forEach> </select> 输入页码:<input type="text" value="${currentPage}" id="jumpPageBox" size="3"> <input type="button" value="跳转" onclick="jumpPage(document.getElementById(&#39;jumpPageBox&#39;))"> </pre> * @return */ public String getPageFormJumpHtml() { String s = "转到\n" + "\t <!-- 输出 HTML SELECT 元素, 并选中当前页面编码 -->\n" + " <select onchange=&#39;jumpPage(this);&#39;>\n" + " \n"; for(int i = 1; i <= getTotalPage(); i++ ) { s += "<option value=" + i + "\n"; if(currentPage == i) { s+= " selected "; } s += "\t>第" + i + "页</option>\n"; } s+= " </select>\n" + " 输入页码:<input type=\"text\" value=\"" + currentPage + "\" id=\"jumpPageBox\" size=\"3\"> \n" + " <input type=\"button\" value=\"跳转\" onclick=\"jumpPage(document.getElementById(&#39;jumpPageBox&#39;))\"> "; return s; } /** * 进行分页计算. */ private void calculate() { if (getPageCount() == 0) { setPageCount(1); } totalPage = (int) Math.ceil(1.0 * getRecordCount() / getPageCount()); // 总页面数 if (totalPage == 0) totalPage = 1; // Check current page range, 2006-08-03 if(currentPage > totalPage) { currentPage = totalPage; } // System.out.println("currentPage=" + currentPage); // System.out.println("maxPage=" + maxPage); // // Fixed logic error at 2004-09-25 hasNextPage = currentPage < totalPage; hasPrevPage = currentPage > 1; return; } /** * @return Returns the 最大页面数. */ public int getTotalPage() { calculate(); return totalPage; } /** * @param currentPage * The 最大页面数 to set. */ @SuppressWarnings("unused") private void setTotalPage(int maxPage) { this.totalPage = maxPage; } /** * 是否有上一页数据 */ public boolean hasPrevPage() { calculate(); return hasPrevPage; } /** * 是否有下一页数据 */ public boolean hasNextPage() { calculate(); return hasNextPage; } // Test public static void main(String[] args) { PageBean pc = new PageBean(); pc.setCurrentPage(2); pc.setPageCount(4); pc.setRecordCount(5); pc.setPageUrl("product/list.do"); System.out.println("当前页 " + pc.getCurrentPage()); System.out.println("有上一页 " + pc.hasPrevPage()); System.out.println("有下一页 " + pc.hasNextPage()); System.out.println("总页面数 " + pc.getTotalPage()); System.out.println("分页 HTML 代码 " + pc.getPageJumpLinkHtml()); } /** * @return Returns the 当前页码数. */ public int getCurrentPage() { return currentPage; } /** * 设置当前页码, 从 1 开始. * @param currentPage * The 当前页码数 to set. */ public void setCurrentPage(int currentPage) { if (currentPage <= 0) { currentPage = 1; } this.currentPage = currentPage; } /** * @return Returns the recordCount. */ public int getRecordCount() { return recordCount; } /** * @param recordCount * The recordCount to set. */ public void setRecordCount(int property1) { this.recordCount = property1; } /** * @return Returns the 每页显示记录数. */ public int getPageCount() { return pageCount; } /** * @param pageCount * The 每页显示记录数 to set. */ public void setPageCount(int pageCount) { this.pageCount = pageCount; } public String getPageUrl() { return pageUrl; } public void setPageUrl(String value) { pageUrl = value; } }
JspPageControlor分页插件使用说明 1、次插件将数据库查询和分页操作分离开,在查询的时候,不管采用什么设计模式,都必须实现 PageListener接口。 2、接口里面包含四个方法 (1)、publicListdoSelect(intrecordStart,intsizePage),参数recordStart表示从第几条 记录开始查询。参数sizePage表示一次查几条记录。返回一个list对象(该list对象可以是 一个记录集,也可以是一个POJO类对象) (2)、publicintgetCount(),查询该表中的记录总数,返回一个int对象。 (3)、publicvoidclose(),放置所有关闭操作的方法。 3、调用页面,必须添加PageListener******,即实现addPageListener(Object)方法,参数为操作 数据库类的对象。 4、用getRecord()方法获取存有记录的list对象; 用getFirstPage()方法获取&#39;首页&#39;的标记; 用getPageUp()方法获取&#39;上一页&#39;的标记; 用getPageDown()方法获取&#39;下一页&#39;的标记; 用getLastPage()方法获取&#39;末页&#39;的标记; 用getPageForward()方法获取&#39;跳转到第几页&#39;的输入框标记; 用getCountRecord()方法获取总记录数; 用getCountPage()方法获取总页数; 用getCurrentPage()方法获取当前页数; 5、如果需要把上一页,下一页等标记换成图片,则只需调用 setPageDown(&#39;图片路径+图片名&#39;), setPageUp(&#39;图片路径+图片名&#39;), setFirstPage(&#39;图片路径+图片名&#39;), setLastPage(&#39;图片路径+图片名&#39;); 详细操作请查看帮助文档和具体实现案例; PageControlor分页插件(次插件仅支持jsp) 包含3个文件: PageControlor分页插件; 分页的帮助文档; 分页插件使用案例; 运行使用具体案例时,须注意以下几点: 1、运行环境为jdk(1.4以上),Tomcat(5.0以上),mysql(5.0.x); 2、运行时须改动init.properties,把数据库名,用户名和密码改称自己数据库的设置; 3、将news.sql文件导入到您的mysql服务器里面。 开发者:千里web架构实验室成员--刘捷 2007年10月29日
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值