使用bootstrap实现分页(没使用插件)分页带省略号
效果图如下: 我是后端使用的PHP,并且在JSON数据方面没有采取用对象的方式,而是简单采取特殊符号分割成一个二维数组,从而读取值。 主要思想:前台用Ajax拉取出总页数,分类讨论当前面在第一个、最后两个以及中间的情况,动态绘制分页栏,在后台数据库使用limit限定查询当前页码对应页面的数据量,而不用一次拉取出全部数据。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap.min.css"> <link href="../resources/css/app.css" rel="stylesheet"/> <link href="index.css" rel="stylesheet"> <script src="../resources/js/jquery.js"></script> <script type="text/javascript" src="http://cdn.staticfile.org/jquery/2.0.0/jquery.min.js"></script> <script type="text/javascript" src="http://cdn.staticfile.org/jqueryui/1.10.2/jquery-ui.min.js"></script> <script type="text/javascript" src="http://cdn.staticfile.org/jqueryui-touch-punch/0.2.2/jquery.ui.touch-punch.min.js"></script> <script type="text/javascript" src="http://cdn.staticfile.org/twitter-bootstrap/3.0.1/js/bootstrap.min.js"></script> <script type="text/javascript" src="http://cdn.ibootstrap.cn/www.layoutit.com/js/jquery.htmlClean.js"></script> <script type="text/javascript" src="http://cdn.ibootstrap.cn/www.layoutit.com/js/builder/v3/scripts.min.js"></script> <script> function login(){ window.location="../login/index.html"; } var currentPage=1; var pagesize = 10; // getpage(currentPage); var SumPage; function rebuiltPage(currentPage) { if(SumPage<=5) return; // alert(currentPage); if(currentPage==1){ // alert(currentPage+"Yes"); $("#pagelist").empty(); let str = ""; str = "<li><a οnclick='getpage(1)'>First</a></li>"; $("#pagelist").append(str); str = "<li><a οnclick='getprevpage()'>Prev</a></li>"; $("#pagelist").append(str); endpagenum = currentPage + 2; for (let i = currentPage; i <= endpagenum; i++) { str = "<li><a οnclick='getpage(" + i + ")'>" + i + "</a></li>"; $("#pagelist").append(str); } str = "<li><a οnclick='rebuiltPage(" + (currentPage + 1) + ")'>" + "…" + "</a></li>"; $("#pagelist").append(str); str = "<li><a οnclick='getpage(" + SumPage + ")'>" + SumPage + "</a></li>"; $("#pagelist").append(str); str = "<li><a οnclick='getnextpage()'>Next</a></li>"; $("#pagelist").append(str); } else if (currentPage<SumPage-1) { $("#pagelist").empty(); let str = ""; str = "<li><a οnclick='getpage(1)'>First</a></li>"; $("#pagelist").append(str); str = "<li><a οnclick='getprevpage()'>Prev</a></li>"; $("#pagelist").append(str); endpagenum = currentPage + 1; for (var i = currentPage-1; i <= endpagenum; i++) { str = "<li><a οnclick='getpage(" + i + ")'>" + i + "</a></li>"; $("#pagelist").append(str); } str = "<li><a οnclick='rebuiltPage(" + (currentPage + 1) + ")'>" + "…" + "</a></li>"; $("#pagelist").append(str); str = "<li><a οnclick='getpage(" + SumPage + ")'>" + SumPage + "</a></li>"; $("#pagelist").append(str); str = "<li><a οnclick='getnextpage()'>Next</a></li>"; $("#pagelist").append(str); } else if(currentPage>=SumPage-1){ $("#pagelist").empty(); let str = ""; str = "<li><a οnclick='getpage(1)'>First</a></li>"; $("#pagelist").append(str); str = "<li><a οnclick='getprevpage()'>Prev</a></li>"; $("#pagelist").append(str); str = "<li><a οnclick='getpage(" + 1 + ")'>" + 1 + "</a></li>"; $("#pagelist").append(str); str = "<li><a οnclick='rebuiltPage(" + (currentPage-1) + ")'>" + "…" + "</a></li>"; $("#pagelist").append(str); beginPage = SumPage-2; for (let i = beginPage; i <= SumPage; i++) { str = "<li><a οnclick='getpage(" + i + ")'>" + i + "</a></li>"; $("#pagelist").append(str); } str = "<li><a οnclick='getnextpage()'>Next</a></li>"; $("#pagelist").append(str); } } $.ajax({ type: 'POST', url: '../../com/index/index.php', data:"action=tzGetCol", success: function (data) { console.log(data); var a = data.split('&_cxllovezjh'); // alert(a); console.log(a); var pagenum = a[0]; SumPage = Math.ceil(pagenum*1.0/pagesize); getpage(currentPage); // rebuiltPage(currentPage); }, error:function(){ console.log("ERROR") } }); function getpage(pagenum){ // alert(SumPage); if(pagenum>SumPage || pagenum<=0){ alert("已经到头啦!"); return; } currentPage=pagenum; rebuiltPage(currentPage); $.ajax({ type: 'POST', url: '../../com/index/index.php', data:"action=tzShowPage&pagenum="+pagenum, success: function (data) { console.log(data); var a = data.split('&_cxllovezjh'); console.log(a); var trStr=""; $("#tzlist").empty(); for (var i = 0; i < a.length-1; i++) { //TODO:判断置顶与否,颜色不同 if (JSON.parse(a[i]).top==1) { trStr += '<li>'; trStr += "<a style='color:red;margin-left:-5px;width:225px;' href='lookpage.html?mold=tz&id="+JSON.parse(a[i]).id+"'>" + "【置顶】" + JSON.parse(a[i]).title; trStr += "</a>"; trStr += " <span style='color:red;'>" + JSON.parse(a[i]).postdate + "</span>"; trStr += '</li>'; } else{ trStr += '<li>'; trStr += "<a href='lookpage.html?mold=tz&id="+JSON.parse(a[i]).id+"'>" + JSON.parse(a[i]).title; trStr += "</a>"; trStr += " <span>" + JSON.parse(a[i]).postdate + "</span>"; trStr += '</li>'; } } $("#tzlist").append(trStr); // $("#hint").html("第"+currentPage+"页,共"+SumPage+"页"); }, error:function(){ console.log("ERROR") } }); } function getprevpage() { getpage(currentPage-1); } function getnextpage() { getpage(currentPage+1); } </script> </head> <body> <div class="container"> <div class="row clearfix"> <div class="col-md-12 column box"> <div id="section_tzgg_title"> <span>新闻通知</span> </div> <ul class="list" id="tzlist"> </ul> </div> <div class="col-md-12 column"> <span> <ul class="pagination" id="pagelist"> </ul> <span class="pagination-lg" id="hint"></span> </span> </div> </div> </div> </body> </html>
PHP中的数据处理语句为:
if($action=="tzShowPage"){ $num = $_POST['pagenum']; $begin = ($num-1)*10; $db = new MySQL_DB(); $db->connect(); $sql = "select * from tz order by top desc,postdate desc limit $begin,10"; $db->query($sql); $db->close(); }
MySQL_DB为自定义的数据库连接类,其query函数原型如下:
public function query($sql){ try { mysqli_query($this->database_connection, 'set names utf8'); $result = mysqli_query($this->database_connection, $sql); // echo if (mysqli_num_rows($result) > 0) { // 输出数据 while ($row = mysqli_fetch_assoc($result)) { echo json_encode($row,JSON_UNESCAPED_UNICODE).'&_cxllovezjh';//转化为json串传输 } } else { // echo "0 结果"; } } catch (Exception $e){ // echo "异常!连接未建立!"; return -1; } return 0; }