bootstrap+jq实现简单的分页

1.心理路程

新手上路,最近做了几个项目都涉及到分页,但是每次做完分页之后都没有归纳出自己的一套通用的分页实现,导致每次做分页的时候都需要花费时间去重新写一个,为什么不使用分页插件呢?原因是(1)自己实现一个扩展性比较好(2)能够加强对jq的使用(3)分页插件太多了,不想去深究了。

综上,打算将这次项目中自己所做的分页实现作为以后的通用模板,当然我会不断的优化更新的。所以前期虽然实现了简单的分页,但是可能代码杂乱无章,我也是在不断进步中,多多指教。

话不多说,直接上代码!

PS:为了积极性,先放张成品图

2.代码实现

2.1导包

需要导入的包是bootstrap的css和js文件,外加一个jquery.js文件,这里自行百度下载即可。

关于IDEA搭建SSM项目的教程看这里

IDEA2017创建SpringMVC4+Spring4+mybatis3+Maven3的web项目

2.2 html

    <div class="row">
        <div class="col-md-12">
            <div class="panel panel-default">
                <div class="panel-body">
                    <div class="table-responsive">
                        <table class="table table-striped table-bordered table-hover userListTable">
                            <thead>
                            <tr>
                                <th>用户id</th>
                                <th>用户名</th>
                                <th>角色名称</th>
                                <th>邮箱</th>
                                <th>手机号</th>
                                <th>状态</th>
                            </tr>
                            </thead>
                            <tbody>

                            </tbody>
                        </table>

                    </div>
                </div>
                <!--分页栏-->
                <div id="pagination">
                    
                </div>
            </div>
        </div>
    </div>

2.3 userList.js

//注意:若将代码写到$(function(){})中,则里面的所有方法都不是全局的,故此a标签中的onclick调用不到里面的方法!!!。
//总记录数
var totalNum = 0;

//总页数
var totalPage = 0;

//默认每页显示数
var avageNum = 1;

//默认显示第一页
var currentPage = 1;


getUserList(currentPage,avageNum);
initPagination(totalNum,totalPage);

//与后台交互获取数据,异步加载到页面上
function getUserList(pageNum,pageSize){
    currentPage = pageNum;
    $(".panel-body table tbody").html(" ");
    $.ajax({
        url:"../../user/userList.do",
        method:"get",
        data:{"pageNum":pageNum,"pageSize":pageSize},
        async:false,
        success:function(data){
            if (data.success){
                var length = data.data.list.length;
                totalNum = data.data.total;
                totalPage = data.data.pages;
                for(var  i = 0;i<length;i++){
                    var userId = data.data.list[i].userId;
                    var userName = data.data.list[i].userName;
                    var roleLength = data.data.list[i].roleList.length;
                    var roleName = " ";
                    for(var j=0;j<roleLength;j++){
                        roleName = data.data.list[i].roleList[j].roleName + " " + roleName;
                    }
                    var email = data.data.list[i].userEmail;
                    var phone = data.data.list[i].userPhone;
                    var status = data.data.list[i].userStatus;
                    $(".userListTable tbody").append(
                        '<tr>'+
                        '<td>'+userId+'</td>'+
                        '<td>'+userName+'</td>'+
                        '<td>'+roleName+'</td>'+
                        '<td>'+email+'</td>'+
                        '<td>'+phone+'</td>'+
                        '<td><button type="button" class="btn btn-success btn-default">角色分配</button><button type="button" class="btn btn-default btn-danger">禁止登陆</button></td>'+
                        '</tr>'
                    )
                }
            }
        }
    });
}

//初始化分页栏
function initPagination(totalPage,totalNum) {
    $('#pagination').html(" ");
    $('#pagination').append(
        '<ul class="pagination" style="display:inline;">' +
        '<span style="float: right;">每页显示' +
        '<select id="dataNum">' +
        '<option value="1">1</option>' +
        '<option value="2">2</option>' +
        '<option value="3">3</option>' +
        '</select>条记录,总共有' + totalPage + '页,总共' + totalNum + '条记录</span>' +
        '</ul>'
    )
    // onclick="getUserList('+ (currentPage - 1) + ','+ avageNum + ')"
    $("#pagination ul").append(
        '<li><a href="javascript:void(0);" id="prev">上一页</a>'
    )
    for (var i = 1; i <= totalPage; i++) {
        $("#pagination ul").append(
            '<li id="page'+i+'"><a href="javascript:void(0);"  onclick="getUserList(' + i + ',' + avageNum + ')">' + i + '</a>'
        )
    }
    $("#pagination ul").append(
        '<li><a href="javascript:void(0);"  id="next">下一页</a>'
    )
    $("select option[value=" + avageNum + "]").attr('selected', true)
    $("#page1").addClass("active");
    checkA();
}

//很关键,因为执行initPagination方法时,将select删除再重新添加,所以需要先将select上的结点移除off
//然后再绑定结点on,如果不这么做,会出现change事件只被触发一次。
$(document).off('change','#dataNum').on('change','#dataNum',function(){
    avageNum = $(this).children('option:selected').val();
    currentPage = 1;
    getUserList(currentPage,avageNum);
    initPagination(totalPage,totalNum);
});

//设置分页栏点击时候的高亮
$("#pagination").on("click","li",function(){
    var aText = $(this).find('a').html();
    checkA();
    if (aText == "上一页"){
        $(".pagination > li").removeClass("active");
        $("#page"+(currentPage -1)).addClass("active");
        getUserList(currentPage - 1,avageNum);
        checkA();
    }else if(aText == "下一页"){
        $(".pagination > li").removeClass("active");
        $("#page"+(currentPage + 1)).addClass("active");
        getUserList(currentPage + 1,avageNum);
        checkA();
    }else{
        $(".pagination > li").removeClass("active");
        $(this).addClass("active");
    }
})

//因为其他地方都需要用到这两句,所以封装出来
//主要是用于检测当前页如果为首页,或者尾页时,上一页和下一页设置为不可选中状态
function checkA() {
    currentPage == 1 ? $("#prev").addClass("btn btn-default disabled") : $("#prev").removeClass("btn btn-default disabled");
    currentPage == totalPage ? $("#next").addClass("btn btn-default disabled") : $("#next").removeClass("btn btn-default disabled");
}

3.效果图

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值