[JQuery]分页插件PageList

虽然已经有了[JQuery]分页插件jQuery pager plugin功能扩展,可惜蛋疼的UI不一样,只能重做一个,唉

基本上与pager类似,只不过跳转方式有所变化,以下是具体的js,其中defaultSettings为相关参数设定,其中要注意的是renderPerCall,这个参数如果设为false,将不执行html重绘

    $.fn.pageList = function (arg, methodName) {
            if (typeof methodName === "string" && $.trim(methodName) != "") {
                switch (methodName) {
                    case 'refresh'://刷新当前页,一般用于删除或者更新后
                        $(this).each(function () {
                            var arg = $(this).data('pageListArg');
                            if (arg != null && typeof arg.clickCallback === "function") {
                                arg.clickCallback(arg.currentPage);
                            }
                        });
                        break;
                }
            }
            else {
                var defaultSettings = {
                    prevText: 'Prev',//显示的前一页文本
                    nextText: 'Next',//显示的下一页文本
                    showGoLink: 'auto',//是否显示快速跳转,可能的值为auto 自动判断;true 永远显示;false 永不显示
                    goInputType: 'select',//如何显示快速跳转输入,可能的值为select 下拉列表;text 输入框,默认值为select
                    goText: 'Go',//显示的快速跳转文本
                    recordText: '',//显示记录数,为空时不显示,否则按照占位符显示文本,{0}表示总页数,{1}表示总记录数
                    clickCallback: function (currentPage) { },//链接被点击时触发的事件,currentPage表示当前点击的是第几页,索引从1开始
                    renderPerCall: true,//是否每次点击都重新绘制,如果每次clickCallback事件中都会重新绘制pageList,此处请设置为false减少绘制消耗
                    pageSize: 10,//每页显示的数据条数
                    currentPage: 1,//当前第几页,索引从1开始
                    totalCount: 0,//总记录数
                    showPageRange: 5//去除第一页,最后一页后,还需显示的页面数量
                };
                arg = $.extend({}, defaultSettings, arg);
                var totalPages = ~~(arg.totalCount / arg.pageSize) + (~~(arg.totalCount % arg.pageSize) == 0 ? 0 : 1);//获取总页数
                if (arg.currentPage < 1) {//修正当前页页码为第一页
                    arg.currentPage = 1;
                }
                if (arg.currentPage > totalPages) {//修正当前页页码为最后一页
                    arg.currentPage = totalPages;
                }
                $(this).data('pageListArg', arg);
                $(this).each(function () {
                    $(this).empty();//无数据
                    if (totalPages > 0) {
                        var ul = $('<ul class="pager"></ul>');
                        var startPage = 2, endPage = totalPages - 1;//排除首页最后一页后显示的第一个超链接,最后一个超链接
                        var prevS = false, nextS = false;//是否需要显示…对应的超链接
                        if (arg.showPageRange + 4 < totalPages) {
                            var prevReduce = ~~(arg.showPageRange / 2);
                            var nextAdd = prevReduce;
                            if (~~(arg.showPageRange % 2) == 0) {
                                prevReduce--;//showPageRange为偶数时,currentPage前面显示的页码链接数比后面显示的链接数少一个
                            }
                            if (prevReduce < 0) {//修正当showPageRange被设置为1导致的负数
                                prevReduce = 0;
                            }
                            startPage = arg.currentPage - prevReduce;
                            if (startPage < 2) { startPage = 2; }//修正startPage
                            endPage = arg.currentPage + nextAdd;
                            if (endPage - startPage < arg.showPageRange) { endPage = startPage + arg.showPageRange - 1; }//根据startPage修正endPage
                            if (endPage > totalPages - 1) { endPage = totalPages - 1; startPage = endPage - arg.showPageRange + 1; }//修正endPage,并同步修正startPage
                            if (startPage < 3) {//再次修正startPage
                                startPage = 2;
                            }
                            if (endPage > totalPages - 1) {//再次修正endPage
                                endPage = totalPages - 1;
                            }
                            prevS = startPage - 1 > 1;
                            nextS = endPage + 1 < totalPages;
                        }
                        var li = renderDoms(arg.prevText, arg.currentPage == 1, false, arg.currentPage - 1, arg);//前一页
                        li.addClass("prev");
                        ul.append(li);
                        ul.append(renderDoms("1", arg.currentPage == 1, arg.currentPage == 1, 1, arg));//第一页
                        if (prevS) {
                            ul.append(renderDoms('…', false, false, startPage - 1, arg));//…页
                        }
                        for (var i = startPage; i <= endPage; i++) {
                            ul.append(renderDoms(i, arg.currentPage == i, arg.currentPage == i, i, arg));//第i页
                        }
                        if (nextS) {
                            ul.append(renderDoms('…', false, false, endPage + 1, arg));//…页
                        }
                        if (totalPages > 1) {
                            ul.append(renderDoms(totalPages, arg.currentPage == totalPages, arg.currentPage == totalPages, totalPages, arg));//最后一页
                        }
                        li = renderDoms(arg.nextText, arg.currentPage == totalPages, false, arg.currentPage + 1, arg);//下一页
                        li.addClass("next");
                        ul.append(li);
                        var showGo;
                        switch ((arg.showGo + '').toLowerCase()) {
                            case "true":
                                showGo = true;
                                break;
                            case "false":
                                showGo = false;
                                break;
                            default:
                                showGo = arg.showPageRange + 4 < totalPages;
                                break;
                        }
                        if (showGo) {
                            li = $('<li class="text"><span class="go">' + arg.goText + '</span></li>');
                            var sel;
                            if (arg.goInputType.toLowerCase() != 'text') {
                                sel = $('<select class="go"></select>');//<input tyle="text" class="go" />
                                for (var i = 1; i <= totalPages; i++) {
                                    sel.append('<option value="' + i + '">' + i + '</option>');
                                }
                                sel.val(arg.currentPage);
                            }
                            else {
                                sel = $('<input tyle="text" class="go" />');
                                sel.focus(function () {
                                    $(this).val('');
                                }).change(function () {
                                    var num = parseInt($(this).val());
                                    if (num && num > 0) {
                                        if (num > totalPages) {
                                            num = totalPages;
                                        }
                                        $(this).val(num);
                                    }
                                    else {
                                        $(this).val('');
                                    }
                                }).keyup(function () { $(this).change(); });
                            }
                            var sp = li.find('span');
                            sel.insertBefore(sp);
                            sp.click(function () {
                                var pageNumber = ~~$(this).parent().find('.go:eq(0)').val();
                                if (pageNumber > 0) {
                                    clickEvent($(this).parent(), arg, pageNumber);
                                }
                            });
                            ul.append(li);
                        }
                        if (typeof arg.recordText === "string" && $.trim(arg.recordText) != "") {
                            ul.append('<li class="text">' + arg.recordText.replace(/\{0\}/g, totalPages).replace(/\{1\}/g, arg.totalCount) + '</li>');
                        }
                        $(this).append(ul);
                    }
                });
            }
            function renderDoms(text, disable, active, pageNumber, arg) {
                var li = $('<li><a style="cursor:' + (disable ? "" : "pointer") + ';">' + text + '</a></li>');
                if (active) {
                    li.addClass("active");
                }
                if (disable) {
                    li.addClass("disable");
                }
                else {
                    li.click(function () {
                        clickEvent(this, arg, pageNumber);
                    });
                }
                return li;
            }
            function clickEvent(dom, arg, pageNumber) {
                if (typeof arg.clickCallback === "function") {
                    arg.clickCallback(pageNumber);
                }
                if (arg.renderPerCall) {
                    arg.currentPage = pageNumber;
                    $(dom).parent().parent().pageList(arg);
                }
            }
        };

相应的css如下:

.pager-list {
    float: right;
    position: relative;
    font-size: 10pt;
}

    .pager-list > .pager {
        display: block;
        position: relative;
    }

    .pager-list ul li {
        list-style: none;
        float: left;
        margin: 0 3px;
        min-width: 37px;
    }

        .pager-list ul li.next,
        .pager-list ul li.prev {
            width: auto;
        }

        .pager-list ul li.disable a {
            color: #848c94;
        }

        .pager-list ul li.text {
            display: block;
            height: 30px;
            line-height: 30px;
            text-align: center;
            border: 0px;
            color: black;
            border-radius: 2px;
            -webkit-border-radius: 2px;
            -moz-border-radius: 2px;
        }

            .pager-list ul li.text input.go {
                width: 25px;
            }
            .pager-list ul li.text select.go {
                padding:2px 2px;
            }
            .pager-list ul li.text span.go {
                color: #848c94;
                margin-left: 2px;
                cursor: pointer;
                background-color: silver;
                padding: 4px;
                border-radius: 2px;
                -webkit-border-radius: 2px;
                -moz-border-radius: 2px;
            }

        .pager-list ul li a {
            display: block;
            /*width: 24px;*/
            padding: 0 7px;
            height: 26px;
            line-height: 26px;
            text-align: center;
            border: 1px solid #848c94;
            color: black;
            border-radius: 2px;
            -webkit-border-radius: 2px;
            -moz-border-radius: 2px;
        }

            .pager-list ul li a:hover,
            .pager-list ul li.active a {
                background-color: #b2d1d8;
            }

测试用的Html如下:

    <div class="pager-list"></div><div style="clear: both;"></div>
    <div class="pager-list"></div><div style="clear: both;"></div>
    <div class="pager-list"></div><div style="clear: both;"></div>
    <div class="pager-list"></div><div style="clear: both;"></div>
    <div class="pager-list"></div><div style="clear: both;"></div>
    <div class="pager-list"></div><div style="clear: both;"></div>
    <input type="button" id="btn_Refresh" value="Refresh" />

测试对应的js代码如下:

        $().ready(function () {
            $('div.pager-list').pageList({
                prevText: '前一页',
                nextText: '下一页',
                recordText: '共{0}页,{1}条记录',
                totalCount: 405,
                goInputType: 'text',
                //showGoLink: true,
                showPageRange: 5,
                renderPerCall: true,
                clickCallback: function (currentPage) {
                    console.info("currentPage:" + currentPage);
                }
            });
            $('#btn_Refresh').click(function () {
                $('div.pager-list').pageList(null, "refresh");
            });
        });

最后来张截图,样式丑了点

时间: 2024-11-04 11:50:35

[JQuery]分页插件PageList的相关文章

jquery分页插件

jquery.mypagination.js 文件: /* * * * jquery分页插件 * 1.0  zheng 2014-03-18 * 1.1  兼容url包含#号地址,GoToPage可以指定锚点(特殊需求)2014-04-10 09:00:34 * 1.2  可以配置分页条列出页面数 * 1.3  增加了页面码跳转功能 *  $('#mypage').scPagination(555, { *              pageSize: 10,//每页显示的记录条数 *    

Jquery 分页插件 Jquery Pagination

Jquery 分页插件 Jquery Pagination 分页插件来说,我觉得适用就行,尽量简单然后能够根据不同的应用场景能够换肤.展现形式等. 对于初学者想写分页插件的同学,也可以看下源码,代码也挺简单明了的,也助于自己写个小插件. 不过我比较懒,一般直接拿着各种插件用,想偷懒的同学们也可以用用看: Jquery Pagination 大家可以去这里查看下演示:http://www.xuetub.com/plugin/jquery/221 使用方法也比较简单: <div id="pag

JQuery分页插件封装(源码来自百度,自己封装)

最近由于项目的需要,做了一个基于JQuery的表格分页插件封装,部分源码来源百度,经由自己封装完成. 下面是具体代码和说明,仅供参考.第一步可以先将我的HTML,CSS,JS这三部分的代码创建好后先运行看看,下图是文件目录展示. html <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <

简单实用的jQuery分页插件

在做商城和订单管理的时候,常常会用到分页功能,所以我封装了一个jQuery的分页插件,该插件主要实现上下翻页,输入数字跳转等功能. 具体实现如下: 输入参数需要当前页码pageNo,总页码totalPage,回调函数callback. 主要的实现有两个函数,一个是根据当前页和总页数生成相应的html的代码,一个是事件绑定及回调函数的执行. creatHtml函数: creatHtml:function(){ var me=this; var content=""; //当前页码 var

分享一个Jquery 分页插件 Jquery Pagination

分页插件来说,我觉得适用就行,尽量简单然后能够根据不同的应用场景能够换肤.展现形式等. 对于初学者想写分页插件的同学,也可以看下源码,代码也挺简单明了的,也助于自己写个小插件. 不过我比较懒,一般直接拿着各种插件用,想偷懒的同学们也可以用用看: Jquery Pagination 大家可以去这里查看下演示:http://www.xuetub.com/plugin/jquery/221 使用方法也比较简单: <div id="page2" class="m-paginat

jQuery 分页插件(jQuery.pagination.js)ajax 实现分页

首先需要引入jQuery 再次需要引入 <script src="jquery/jquery.pagination.js"></script> 同时也要引入 <link rel="stylesheet" href="css/pagination.css"> 引入之后,分页基本样子 下面看分页配置参数 var defaults = { totalData: 0, //数据总条数 showData: 0, //每页

jquery分页插件精选

1.最新的分页控件:Mricode.Pagination(推荐) https://github.com/mricle/Mricode.Pagination 2.Jquery Pagination Plugin:(此版本以后不再更新) http://mricle.com/JqueryPagination 使用例子: http://www.jq22.com/yanshi2977 http://www.jq22.com/jquery-info2977

自定义Jquery分页插件

(function ($) { 'use strict'; $.jPager = function (option) { var defaultOption = { pages: [{ id: '', showSelectPage: true }], currentpage: 1, //当前页 pagesize: 20, //一页显示数量 total:1, //条数 totalpage: 1 //总页码 }; var pageObj = $.extend(defaultOption, optio

JQuery分页插件bs_pagination的应用

一.引入bs_pagination的js文件以及样式文件(项目中需要引用Jquery和bootstrap的相关js和样式文件,且在以下引用之前): <link href="~/Scripts/bs_paginationJS/jquery.bs_pagination.min.css" rel="stylesheet" /> <script src="~/Scripts/bs_paginationJS/jquery.bs_pagination