Jquery插件实现分页查询

xiaoxiao2021-02-27  111

1.场景分析

    近期在项目中很多地方都用到了分页查询,今天笔者就前端的Jquery插件实现分页详细地跟大家讲解下,希望能帮助到需要的各位!

2.实现方案

①page.css样式代码

.page{ list-style: none; } .page>li{ float: left; padding: 5px 10px; cursor: pointer; } .page .pageItem{ border: solid thin #DDDDDD; margin: 5px; } .page .pageItemActive{ border: solid thin #0099FF; margin: 5px; background-color: #0099FF; color:white; } .page .pageItem:hover{ border: solid thin #0099FF; background-color: #0099FF; color:white; } .page .pageItemDisable{ border: solid thin #DDDDDD; margin: 5px; background-color: #DDDDDD; } ②page.js动效代码

/** * Created by zhangxing on 2017/4/26. */ var page = { "pageId":"", "data":null, "maxshowpageitem":5,//最多显示的页码个数 "pagelistcount":10,//每一页显示的内容条数 "init":function(listCount,currentPage,options){ this.data=options.data, this.pageId=options.id, this.maxshowpageitem=options.maxshowpageitem,//最多显示的页码个数 this.pagelistcount=options.pagelistcount//每一页显示的内容条数 page.initPage(listCount,currentPage); }, /** * 初始化数据处理 * @param listCount 列表总量 * @param currentPage 当前页 */ "initPage":function(listCount,currentPage){ var maxshowpageitem = page.maxshowpageitem; if(maxshowpageitem!=null&&maxshowpageitem>0&&maxshowpageitem!=""){ page.maxshowpageitem = maxshowpageitem; } var pagelistcount = page.pagelistcount; if(pagelistcount!=null&&pagelistcount>0&&pagelistcount!=""){ page.pagelistcount = pagelistcount; } page.pagelistcount=pagelistcount; if(listCount<0){ listCount = 0; } if(currentPage<=0){ currentPage=1; } page.setPageListCount(listCount,currentPage); }, /** * 初始化分页界面 * @param listCount 列表总量 */ "initWithUl":function(listCount,currentPage){ var pageCount = 1; if(listCount>=0){ var pageCount = listCount%page.pagelistcount>0?parseInt(listCount/page.pagelistcount)+1:parseInt(listCount/page.pagelistcount); } var appendStr = page.getPageListModel(pageCount,currentPage); $("#"+page.pageId).html(appendStr); }, /** * 设置列表总量和当前页码 * @param listCount 列表总量 * @param currentPage 当前页码 */ "setPageListCount":function(listCount,currentPage){ listCount = parseInt(listCount); currentPage = parseInt(currentPage); page.initWithUl(listCount,currentPage); page.initPageEvent(listCount); page.viewPage(currentPage,listCount,page.pagelistcount,page.data) // fun(currentPage); }, //页面显示功能 "viewPage":function (currentPage,listCount,pagelistcount,data){ var NUM=listCount%pagelistcount==0?listCount/pagelistcount:parseInt(listCount/pagelistcount)+1; if(currentPage==NUM){ var result=data.slice((currentPage-1)* pagelistcount,data.length); } else{ var result=data.slice((currentPage-1)*pagelistcount,(currentPage-1)*pagelistcount+pagelistcount); } options.callBack(result); }, "initPageEvent":function(listCount){ $("#"+page.pageId +">li[class='pageItem']").on("click",function(){ page.setPageListCount(listCount,$(this).attr("page-data"),page.fun); }); }, "getPageListModel":function(pageCount,currentPage){ var prePage = currentPage-1; var nextPage = currentPage+1; var prePageClass ="pageItem"; var nextPageClass = "pageItem"; if(prePage<=0){ prePageClass="pageItemDisable"; } if(nextPage>pageCount){ nextPageClass="pageItemDisable"; } var appendStr =""; appendStr+="<li class='"+prePageClass+"' page-data='1' page-rel='firstpage'>首页</li>"; appendStr+="<li class='"+prePageClass+"' page-data='"+prePage+"' page-rel='prepage'><上一页</li>"; var miniPageNumber = 1; if(currentPage-parseInt(page.maxshowpageitem/2)>0&¤tPage+parseInt(page.maxshowpageitem/2)<=pageCount){ miniPageNumber = currentPage-parseInt(page.maxshowpageitem/2); }else if(currentPage-parseInt(page.maxshowpageitem/2)>0&¤tPage+parseInt(page.maxshowpageitem/2)>pageCount){ miniPageNumber = pageCount-page.maxshowpageitem+1; if(miniPageNumber<=0){ miniPageNumber=1; } } var showPageNum = parseInt(page.maxshowpageitem); if(pageCount<showPageNum){ showPageNum = pageCount; } for(var i=0;i<showPageNum;i++){ var pageNumber = miniPageNumber++; var itemPageClass = "pageItem"; if(pageNumber==currentPage){ itemPageClass = "pageItemActive"; } appendStr+="<li class='"+itemPageClass+"' page-data='"+pageNumber+"' page-rel='itempage'>"+pageNumber+"</li>"; } appendStr+="<li class='"+nextPageClass+"' page-data='"+nextPage+"' page-rel='nextpage'>下一页></li>"; appendStr+="<li class='"+nextPageClass+"' page-data='"+pageCount+"' page-rel='lastpage'>尾页</li>"; return appendStr; } } ③主页面query.html代码

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>ECharts</title> <!-- 引入 echarts.js --> <link rel="stylesheet" href="css/gongchang-style.css" /> <link href="css/page.css" type="text/css" rel="stylesheet"/> <script src="http://www.jq22.com/jquery/jquery-1.10.2.js"></script> <script type="text/javascript" src="js/page.js"></script> <script type="text/javascript" src="js/jQuery.js"></script> <script src="js/echarts.js"></script> </head> <body οnlοad="initdata()"> <div> <div class="grid-wrap"> <div> <input type="text" id="nicheng" placeholder="搜索"> <input type="button" οnclick="search()" value="搜索"> </div> <div class="grid" id="grid1"> <div class="grid-header" id="grid1"> <span class="row-1">姓名</span> <span class="row-1">年龄</span> <span class="row-1">性别</span> <span class="row-1">手机号码</span> <span class="row-1">居住地址</span> </div> <div class="grid-body"> <!-- <div class="grid-item"> <span class="row-1">zhangxing</span> <span class="row-1">24</span> <span class="row-1"></span> <span class="row-1">18772351259</span> <span class="row-1">浙江西湖</span> </div> <div class="grid-item"> <span class="row-1">lisishan</span> <span class="row-1">23</span> <span class="row-1"></span> <span class="row-1">17682317584</span> <span class="row-1">浙江余杭</span> </div> --> </div> </div> </div> <!--分页插件--> <div class="page" id="page"></div> </div> <script type="text/javascript"> var options; /**初始函数 * [initdata description] * @return {[type]} [description] */ function initdata(){ alert("进来了"); $.ajax({ type: "get", url: "http://localhost:8080/userInfo/getUserInfo", success: function(data, textStatus){ alert(data.userInfoList[1].username); if(data.status == 1){ var datas = data.userInfoList; alert(datas); options={ "id":"page",//显示页码的元素 "data":datas,//显示数据 "maxshowpageitem":5,//最多显示的页码个数 "pagelistcount":3,//每页显示数据个数 "callBack":function(result){ alert(result); var cHtml=""; for(var i=0;i<result.length;i++){ cHtml+='<div class="grid-item">\ <span class="row-1">'+result[i].username+'</span>\ <span class="row-1">'+result[i].age+'</span>\ <span class="row-1">'+result[i].sex+'</span>\ <span class="row-1">'+result[i].phone+'</span>\ <span class="row-1">'+result[i].address+'</span>\ </div>' } $(".grid-body").html(cHtml); } }; page.init(datas.length,1,options); } }, complete: function(XMLHttpRequest, textStatus){ }, error: function(){ alert("请求网络失败!。。。。。。"); } }); } /**模糊搜索 * [search description] * @return {[type]} [description] */ function search(){ var nicheng =document.getElementById("nicheng").value; $('.grid-item').remove(); $.ajax({ type: "get", url: "http://localhost:8080/userInfo/getUserInfoByName?username="+nicheng, success: function(data, textStatus){ if(data.status == 1){ var addHtml = ""; var result = data.userlist; for (var j =0;j<data.userlist.length;j++) { addHtml+='<div class="grid-item">\ <span class="row-1">'+result[j].username+'</span>\ <span class="row-1">'+result[j].age+'</span>\ <span class="row-1">'+result[j].sex+'</span>\ <span class="row-1">'+result[j].phone+'</span>\ <span class="row-1">'+result[j].address+'</span>\ </div>' } $(".grid-body").html(addHtml); } }, complete: function(XMLHttpRequest, textStatus){ }, error: function(){ alert("请求网络失败!。。。。。。"); } }); } </script> </body> </html> 其中这里涉及到前端的动态数据渲染,这里需要大家细细咀嚼,方能领悟其中的精髓!

前端主要分页代码:

var options={ "id":"page",//显示页码的元素 "data":datas,//显示数据 "maxshowpageitem":5,//最多显示的页码个数 "pagelistcount":4,//每页显示数据个数 "callBack":function(result){ var cHtml=""; for(var i=0;i<result.length;i++){ cHtml+="<li>"+ result[i].name+"</li>";//处理数据 } $("#demoContent").html(cHtml);//将数据增加到页面中 } }; page.init(datas.length,1,options); 按照上述样式进行集成即可;

其中还囊括了一个模糊查询,笔者前篇博文(链接:http://blog.csdn.net/zhangxing52077/article/details/73744779)已经深刻剖析,于此不赘述! 

④后台controller

@RequestMapping(value = "/getUserInfo", produces = "application/json;charset=utf-8") public Map<String,Object> getUserInfo(HttpServletResponse response , @RequestParam(required=false,defaultValue="1") Integer pageNum, @RequestParam(required=false,defaultValue="3") Integer pageSize){ response.setHeader("Access-Control-Allow-Origin","*"); List<UserInfo> userList = userInfoService.getUserInfo(); Map<String,Object> map = new HashMap<>(); map.put("userInfoList",userList); map.put("status",1); return map; }

 ⑤ 后台请求的接口返回全部的json数据(也就是Jquery插件恰好需要的datas数据)

3.测试

效果图:

第1页数据:

第二页数据:

模糊查询:

好了,今天的Jquery分页插件就点到为止了,需要源码的及时私信我!我是张星,欢迎加入博主技术交流群,群号:313145288

老张家的独苗 认证博客专家 java golang linux 微信搜索「老张家的独苗」,回复关键字「资料」获取海量学习资源。我是张星,博客专家,内容合伙人,"老张家的独苗"公号作者,GitChat付费专栏作者,拥有5+年的技术TL的项目管理经验,1000+面试经验。
转载请注明原文地址: https://www.6miu.com/read-17254.html

最新回复(0)