自己编写JQuery扩展分页插件

news/2024/7/10 23:34:50 标签: jquery, 分页, 前端

背景

公司分页插件用到了kkpager
https://github.com/pgkk/kkpager
缺点:不是绑定Dom节点的初始化方式,单页面只能使用一个分页插件,假如一个页面有多个分页需求就不行了,前端给出来的解决方案是复制多份,假如有100个分页呢?难道复制100份?

故让前端基于原有的样式重写了一个HTML分页Dom,我在此基础上修改
前端给过来的Html内容如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>分页</title>
        <link rel="stylesheet" href="pager.css" />
    </head>
    <body>
        <div class="pageBox">
            <span>
                <!--<a href="javascript:void(0);" title="首页">首页</a>
                <a href="javascript:void(0);" title="上一页">上一页</a>
                <a href="javascript:void(0);" title="第一页">1</a>-->
                <span title="首页" class="disabled">首页</span>
                <span title="上一页" class="disabled">上一页</span>
                <span title="第一页" class="curr">1</span>
                <a href="javascript:void(0);" title="第二页">2</a>
                <a href="javascript:void(0);" title="第三页">3</a>
                <a href="javascript:void(0);" title="第四页">4</a>
                <a href="javascript:void(0);" title="第五页">5</a>
                <a href="javascript:void(0);" title="第六页">6</a>
                <span>...</span>
                <a href="javascript:void(0);" title="下一页">下一页</a>
                <a href="javascript:void(0);" title="尾页">尾页</a>
            </span>
            <span>
                当前第 <span class="colorRed">1</span> 页/共<span>6</span>页
                转到第<input type="text" value="" class="gopage"/></span>
        </div>
    </body>
</html>

功能说明

JQuery拓展插件功能说明:
1、插件使用在Ajax无刷新数据加载和分页的情况
2、自动忽略中间页面

使用说明:
1、Head里面加载Css和JS
<link rel="stylesheet" href="pager.css" />
<script type="text/javascript" src="jquery-1.11.1.min.js" ></script>

2、中间Body加上
<div class="pageBox">
    <span class="pageSpan"></span>
</div>

3、body结束后,加载JS
<script type="text/javascript" src="pager.js" ></script>

4、初始化分页
<script>
$(function() {
    //分页
    $(".pageSpan").createPage({
        pageIndex:8,
        totalPage:22,
        backFn:function(pageIndex){
            console.log(pageIndex);
        }
    });
});
</script>

page.js

/**
 * @Description 分页插件,使用该插件,必须放在底部,等Dom节点渲染完毕才能使用
 * @Author Nick
 * @Date 2016/07/30
 * @Version 1.0
 */
(function($) {
    var pager = {
        init : function(obj, page) {
            return (function() {
                pager.fillHtml(obj, page);
                pager.bindEvent(obj, page);
            })();
        },

        //填充Html
        fillHtml : function(pageSpan, page) {
            return (function() {
                pageSpan.empty();
                //首页 上一页
                if(page.pageIndex > 1) {
                    pageSpan.append('<a href="javascript:;" title="首页" class="firstPage">首页</a>');
                    pageSpan.append('<a href="javascript:;" title="上一页" class="prevPage">上一页</a>');
                } else {
                    pageSpan.append('<span title="首页" class="disabled">首页</span>');
                    pageSpan.append('<span title="上一页"  class="disabled">上一页</span>');
                }

                //中间页码
                if(page.totalPage <= 3) {
                    for(var i = 1; i <= page.totalPage; i++) {
                        if(page.pageIndex == i) {
                            pageSpan.append('<span title="第'+i+'页"  class="curr">'+i+'</span>');
                        } else {
                            pageSpan.append('<a href="javascript:;" class="tcdNumber" title="第'+i+'页">'+i+'</a>');
                        }
                    }
                } else if(page.totalPage > 3) {
                    if(page.pageIndex - 2 <= 1 && page.pageIndex +2 <= page.totalPage) {
                        for(var i = 1; i <= (page.pageIndex +2); i++) {
                            if(page.pageIndex == i) {
                                pageSpan.append('<span title="第'+i+'页"  class="curr">'+i+'</span>');
                            } else {
                                pageSpan.append('<a href="javascript:;" class="tcdNumber" title="第'+i+'页">'+i+'</a>');
                            }
                        }
                        pageSpan.append('<span>...</span>');
                    } else if(page.pageIndex - 2 > 1 && page.pageIndex +2 >= page.totalPage) {
                        pageSpan.append('<span>...</span>');
                        for(var i = (page.pageIndex - 2); i <= page.totalPage; i++) {
                            if(page.pageIndex == i) {
                                pageSpan.append('<span title="第'+i+'页"  class="curr">'+i+'</span>');
                            } else {
                                pageSpan.append('<a href="javascript:;" class="tcdNumber" title="第'+i+'页">'+i+'</a>');
                            }
                        }
                    } else if(page.pageIndex - 2 <= 1 && page.pageIndex +2 >= page.totalPage) {
                        for(var i = 1; i <= page.totalPage; i++) {
                            if(page.pageIndex == i) {
                                pageSpan.append('<span title="第'+i+'页"  class="curr">'+i+'</span>');
                            } else {
                                pageSpan.append('<a href="javascript:;" class="tcdNumber" title="第'+i+'页">'+i+'</a>');
                            }
                        }
                    } else if(page.pageIndex - 2 > 1 && page.pageIndex +2 <= page.totalPage) {
                        pageSpan.append('<span>...</span>');
                        for(var i = (page.pageIndex - 2); i <= (page.pageIndex + 2); i++) {
                            if(page.pageIndex == i) {
                                pageSpan.append('<span title="第'+i+'页"  class="curr">'+i+'</span>');
                            } else {
                                pageSpan.append('<a href="javascript:;" class="tcdNumber" title="第'+i+'页">'+i+'</a>');
                            }
                        }
                        pageSpan.append('<span>...</span>');
                    }
                }


                //下一页、尾页
                if(page.pageIndex != page.totalPage) {
                    pageSpan.append('<a href="javascript:;" title="下一页" class="nextPage">下一页</a>');
                    pageSpan.append('<a href="javascript:;" title="尾页" class="endPage">尾页</a>');
                } else {
                    pageSpan.append('<span title="上一页"  class="disabled">下一页</span>');
                    pageSpan.append('<span title="尾页"  class="disabled">尾页</span>');
                }
                pageSpan.append('<span>当前第 <span class="colorRed">'+page.pageIndex+'</span> 页/共<span>'+page.totalPage+'</span>页');
            })();
        },

        //绑定事件
        bindEvent : function(obj, page) {
            //第几页
            return (function() {
                //数字点击事件
                obj.off('click', 'a.tcdNumber');
                obj.off('click', 'a.prevPage');
                obj.off('click', 'a.nextPage');
                obj.off('click', 'a.firstPage');
                obj.off('click', 'a.endPage');
                obj.on('click', 'a.tcdNumber', function() {
                    var pageIndex = parseInt($(this).html());
                    pager.fillHtml(obj, {"pageIndex":pageIndex, "totalPage":page.totalPage});
                    if(typeof(page.backFn == "function")) {
                        page.backFn(pageIndex);
                    }
                });
                //前一页点击事件
                obj.on('click', 'a.prevPage', function() {
                    var pageIndex = parseInt(obj.children('span.curr').html());
                    pager.fillHtml(obj, {"pageIndex":pageIndex-1, "totalPage":page.totalPage});
                    if(typeof(page.backFn == "function")) {
                        page.backFn(pageIndex-1);
                    }
                });
                //下一页点击事件
                obj.on('click', 'a.nextPage', function() {
                    var pageIndex = parseInt(obj.children('span.curr').html());
                    pager.fillHtml(obj, {"pageIndex":pageIndex+1, "totalPage":page.totalPage});
                    if(typeof(page.backFn == "function")) {
                        page.backFn(pageIndex+1);
                    }
                });
                //首页
                obj.on('click', 'a.firstPage', function() {
                    pager.fillHtml(obj, {"pageIndex":1, "totalPage":page.totalPage});
                    if(typeof(page.backFn == "function")) {
                        page.backFn(1);
                    }
                });
                //尾页
                obj.on('click', 'a.endPage', function() {
                    pager.fillHtml(obj, {"pageIndex":page.totalPage, "totalPage":page.totalPage});
                    if(typeof(page.backFn == "function")) {
                        page.backFn(page.totalPage);
                    }
                });
            })();
        }
    }

    //扩展JQuery
    $.fn.createPage = function(options) {
        var page = $.extend({
            pageIndex : 1,
            totalPage : 10,
            backFn : function(p) {
            }
        }, options);
        pager.init(this, page);
    }
})(jQuery);

pager.css


.pageBox{
    text-align: center;
    margin: 20px auto;
    color: #999;
    font-size: 14px;
}
.pageBox a{
    float: none;
    border: 1px solid #d5d5d5;
    height: 28px;
    line-height: 28px;
    padding: 0 9px;
    display: inline-block;
    cursor: pointer;
    background: #fff;
    text-decoration: none;
    color: #333;
    margin-right: 5px;
}
.pageBox a:hover{
    border-color: #999999;
}
.pageBox .colorRed{
    color: red;
}
.pageBox .gopage{
    width: 36px;
    height: 22px;
    line-height: 22px;
    color: #999;
    text-align: center;
    margin-left: 1px;
    margin-right: 1px;
    border: 1px solid #c3c3c3;
    position: relative;
    left: 0px;
    top: 0px;
    outline: none;
}
.pageBox .curr{
    background: none repeat scroll 0 0 #c3c3c3;
    color: #fff;
    height: 30px;
    line-height: 30px;
    padding: 0 10px;
    z-index: 999;
    margin-right: 5px;
    display: inline-block;
}
.pageBox .disabled{
    float: none;
    display: inline-block;
    padding: 0 9px;
    margin-right: 5px;
    border: 1px solid #d5d5d5;
    background-color: #FFF;
    color: #DFDFDF;
    line-height: 28px;
}

页面效果:
<a class=分页效果" title="" />

欢迎拍砖指正和优化升级等!
联系人:Nick 953374957


http://www.niftyadmin.cn/n/1198254.html

相关文章

最后一面《HR面》------十大经典提问

1、HR&#xff1a;你希望通过这份工作获得什么&#xff1f; 1&#xff09;、自杀式回答&#xff1a;我希望自己为之工作的企业能够重视质量&#xff0c;而且会给做得好的员工予以奖励。我希望通过这份工作锻炼自己&#xff0c;提升自己的能力&#xff0c;能让公司更加重视我。 …

Mybatis-generator源码学习和修改

MyBatis Generator 快速入门指南 参考&#xff1a; mybatis配置说明&#xff1a;http://generator.sturgeon.mopaas.com/index.html 大象修改博客&#xff1a;http://www.blogjava.net/bolo/archive/2015/03/25/423826.html Mybatis-Generator详细配置&#xff1a;http://w…

Swagger与SpringMVC项目整合

Swagger与SpringMVC项目整合 为了方便的管理项目中API接口&#xff0c;在网上找了好多关于API接口管理的资料&#xff0c;感觉目前最流行的莫过于Swagger了&#xff0c;功能强大&#xff0c;UI界面漂亮&#xff0c;并且支持在线测试等等&#xff0c;所以本人仔细研究了下Swagg…

Portal研究

Portal Portal说明 一个portal应用可通过复杂的个性化配置用户提供定制的内容&#xff0c;而portal页面就是含有不同的portlet为不同的用户生成内容portlet容器 portlet容器运行portlet&#xff0c;并为portlet提供必要的运行环境 开源portal对比 Jetspeed (2.1.3) Jetsp…

构造一个随机发生器

http://m.blog.csdn.net/blog/u012605629/40406577 构造一个随机发生器 2014-10-23阅读83 评论0 2.已知一随机发生器&#xff0c;产生0的概率是p&#xff0c;产生1的概率是1-p&#xff0c;现在要你构造一个发生器&#xff0c;使得它构造0和1的概率均为 1/2&#xff1b;构造一个…

网易新闻应用源码完整版客户端+服务端源码

网易新闻应用源码完整版客户端服务端源码&#xff0c;仿网易新闻&#xff0c;android端服务器端1&#xff0c;为了加快访问速度&#xff0c;服务器端数据是写死了的&#xff0c;数据太多的就复制粘贴了&#xff0c;不是数据库查询的2&#xff0c;新闻图片下载代码注释掉了&…

MySQL手册阅读整理

版本更新人描述时间v1.0Nick初次编写2016-08-07 MySQL注意点日期Unix系统下数据库名和表名区分大小写 安装Windows-MySQL VS Unix-MySQLLinux使用源码安装Mysql 使用授权查询匹配模式正则表达式 导入SQL脚本 MySQL 此博客是重新复习MySQL整理用&#xff0c;所谓温故知新&…

chown命令

chown将指定文件的拥有者改为指定的用户或组&#xff0c;用户可以是用户名或者用户ID&#xff1b;组可以是组名或者组ID&#xff1b;文件是以空格 分开的要改变权限的文件列表&#xff0c;支持通配符。系统管理员经常使用chown命令&#xff0c;在将文件拷贝到另一个用户的名录下…