前端Jquery使用pagination.js插件进行分页

前言:

分页功能是我们在开发过程中最常见的一个功能了,作为一个以往只会搬砖不会造砖的年轻程序员,今天我要自己来实现这个功能,于是我查了不少的方法,今天我用jquery的pagination.js插件实现了分页,记录一下~
pagination.js源码:http://www.jq22.com/jquery-info5697

场景:

我的应用场景是通过查询条件获取到数据库里的数据,将从后台返回的数据在前端分页显示。
html部分包括一个查询按钮,一个预留给数据的div,一个用来显示第几页的div~

步骤一:引入pagination.js

首先我们要引入pagination.js

<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<!--引入jquery分页插件pagination.js-->
<script src="./jquery.pagination.js" type="text/javascript" ></script>

步骤二:创建一个div用以显示分页

创建一个div用以显示分页

<div class="Pagination" 
style="height:20px;font-size:15px;margin-top: 15px;margin: auto;margin-left: 100px;"
 id="pagination"></div>

(我觉得最好不要把样式写在html中,我这里求方便)

步骤三:通过ajax获取数据并显示

在这里我附上整个script

<script>
	$(document).ready(function(){
	});

	$('#btn_query').on('click',function () {
	/*查询某个班级所有的女生,先获取查询条件值*/
		var class_name= $('#class_name').val();
		var sex = $('#sex option:selected').val();
	/*从后台获取数据并进行分页*/
		$.ajax({
			type : 'GET',
			url: 'http://localhost:8080/query/studentsQuery',
			contentType: "application/json",
			data:{
				"class_name":class_name,
				"sex":sex
			},
			success : function(data) {
			/*首先将要显示数据的部分清空*/
				$('#data_table tbody').html('');
				$('.Pagination').pagination({
					totalData: data.total,//数据的总数量
					showData: 10,//每页显示几条数据
					coping: true,//首页和尾页
					jump: true,//是否可以跳转
					keepShowPN: true,
					homePage: '首页',
					endPage: '末页',
					prevContent: '上页',
					nextContent: '下页',
					callback: function (api) {
					/*当点击第X页时会触发callback函数,所以我把除第一页以外的数据渲染放到callback中,其中api.getCurrent()是获取当前页码*/
				    console.log("this is current" +   api.getCurrent());
						$('.now').text(api.getCurrent());
						if(api.getCurrent()!=1){
							$('#data_table tbody').html('');
							/*每页10条,第二页显示的是10-20的数据,此时next=20,当到最后一页时,next就等于数据总数total*/
							var next = (api.getCurrent()-1)*10+10;
							if((api.getCurrent()-1)*10+10>data.total){
								next = data.total;
							}
							/*依次渲染数据*/
							for(var i =(api.getCurrent()-1)*10;i<next;i++){

								str=" <tr><th>"+(data.list[i].class_name!=null?data.list[i].class_name:'')+
										"</th><th>"+(data.list[i].sex!=null?data.list[i].sex:'')+
										"</th><th>"+(data.list[i].sNo!=null?data.list[i].sNo:'')+
										"</th></tr>";
								$('#data_table tbody').append(str);
							}
						}
					}
				}, function(api) {
					//console.log("this is pagination")
					$('.now').text(api.getCurrent());
					/*因为第一页要在点击查询按钮的时候就触发,所以我把它放在这里*/
					if (api.getCurrent() == 1) {
						for (var i = 0; i < 10; i++) {
							var str = "";
							str=" <tr><th>"+(data.list[i].class_name!=null?data.list[i].class_name:'')+
										"</th><th>"+(data.list[i].sex!=null?data.list[i].sex:'')+
										"</th><th>"+(data.list[i].sNo!=null?data.list[i].sNo:'')+
										"</th></tr>";
							$('#data_table tbody').append(str);
						}
					}
				});
				console.log("success");
				var success=JSON.stringify(data);
				console.log(success);
			},
			error:function (result) {
				console.log("error");
			}
		});
	})
	$('#btn_cancel').on('click',function () {
		console.log('cancel');
		$('#class_name').val("");
	    $('#sex').val('');
		$('#data_table tbody').html('');
	})
</script>

我的数据是通过data.list[i].xxx进行渲染的是因为我后台返回的数据的json格式如下:

{
    "pageNum": 1,
    "pageSize": 111,
    "size": 111,
    "startRow": 0,
    "endRow": 110,
    "total": 111,
    "pages": 1,
    "list": [
    { 
    "class_name":"一年级",
    "sex":"1",
    "sNo":"001"
    },
     { 
    "class_name":"一年级",
    "sex":"1",
    "sNo":"002"
    },........],
     "navigateFirstPage": 1,
    "navigateLastPage": 1,
    "firstPage": 1,
    "lastPage": 1
}
    

这是因为我在后台将我返回的数据进行了page封装,代码如下:(在这里我用实体接收参数传入,通过mybatis进行处理)

    /**
     * 学生查询
     * @param student
     * @return
     */
    @RequestMapping(value = "/studentsQuery", method = RequestMethod.GET)
    @ResponseBody
    public PageInfo<Student> studentsQuery(Student student){
        LOG.info("学生查询条件:{}",student);
        PageInfo<Student> pageInfo = null;
        try{

            List<Student> students= queryService.studentsQuery(student);
            LOG.info("学生查询结果为:...", students);
            pageInfo = new PageInfo<Student>(students);
        }catch(Exception e){
            e.printStackTrace();
        }
        return pageInfo;
    }

}

效果:

在这里插入图片描述
在这里插入图片描述
欢迎批评指正~

jQuery分页代码大致分为两部分,一部分为数据渲染,另一部分为页面分页逻辑。以下是一份简单的jQuery分页代码: ```javascript //数据渲染 function renderList(currentPage) { //ajax获取后台数据 $.ajax({ url: '数据接口', type: 'GET', success: function (data) { var pageSize = 10; //每页显示的数据条数 var totalCount = data.length; //数据总数 var startIndex = (currentPage - 1) * pageSize; //当前页面数据的起始索引 var endIndex = startIndex + pageSize; //当前页面数据的结束索引 var htmlStr = ''; for (var i = startIndex; i < endIndex && i < totalCount; i++) { htmlStr += '<li>' + data[i] + '</li>'; } $('.list').html(htmlStr); } }); } //页面分页逻辑 function pagination() { var currentPage = 1; //当前页码 $('#prev').attr('disabled', true); //上一页按钮默认禁用 $('#next').click(function () { //下一页按钮点击事件 currentPage++; renderList(currentPage); if (currentPage == 2) { //当前为第二页时打开上一页按钮 $('#prev').attr('disabled', false); } }); $('#prev').click(function () { //上一页按钮点击事件 currentPage--; renderList(currentPage); if (currentPage == 1) { //当前为第一页时禁用上一页按钮 $('#prev').attr('disabled', true); } }); } //初始化 renderList(1); //页面初次加载时渲染第一页数据 pagination(); //分页逻辑初始化 ``` 以上代码中,数据渲染部分采用了ajax异步获取后台数据,根据每页显示数据条数和当前页码计算出当前页面数据的起始索引和结束索引,再通过循环渲染出页面数据。页面分页逻辑部分则初始化了当前页码为1,禁用了上一页按钮,同时设置了下一页和上一页按钮的点击事件,点击后通过调用数据渲染函数渲染出对应页面的数据,并根据当前页码打开或禁用上一页按钮。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值