今天終於完成了基於jquery的分頁插件的代碼編寫,也通過了功能測試,實現了分頁功能;由於剛開始寫jquery的插件,所以梳理邏輯的時間也很長,整個過程整整一周時間,今天終於搞完了,先將整個分頁插件的邏輯分享給大家,並將源碼上傳到自己的github倉庫,有需要的請點擊這里下載;給大家先看一下效果圖;
整個分頁邏輯如下:
首先判斷分頁類型,有兩種情況,第一:pageCount > showNum;第二:pageCount <= showNum;
在第一種情況下還會出現如下三種情況;
1、pageNo <= showNum + 2;
2、showNum + 2 < pageNo <= pageCount - showNum + 3;
3、pageCount - showNum + 3 < pageNo <= pageCount;
在1的情況下又分為兩種情況:
(1)、pageNo <= showNum;
(2)、showNum < pageNo <= showNum + 2;
在(2)中情況下面要考慮pageNo是否為最后一頁或倒數第二頁,如果是則隱藏...
提示:
pageNo當前頁碼
pageCount總頁碼數
pageSize每頁顯示條數
showNum顯示幾條頁碼在頁面上
不多說了,給大家附上js源碼,如果在閱讀的過程中發現問題,歡迎大家在評論區與我探討;

1 (function($){ 2 $.fn.paging = function (option) { //通過$.fn定義分頁函數paging,在需要分頁的地方直接調用 3 var defaultOptions = {//默認項設置 4 pageNo:1,//默認當前頁 5 pageSize:10,//默認每頁顯示條數 6 count:0,//默認數據總條數 7 showNum:6,//默認顯示頁碼數 8 jumpTo:true,//默認顯示跳轉指定頁模塊 9 jumpBtnName:'確定',//默認跳轉按鈕的名稱 10 fontSize:16,//跳轉按鈕字體大小 11 }; 12 13 var self = this; 14 var pagingCount = 0;//共計頁碼 15 var Settings = $.extend( {}, defaultOptions, option );/*將defaultOptions對象和option 16 隨想相應的屬性合並,並將新的對象賦值給Setting對象本身*/ 17 $(this).empty();//清空當前DOM節點下面的所有子節點 # $('a').empty() 清空a下面所有的子節點 18 19 var checkDigit = function () {/*校驗數據條數count,每頁顯示條數pageSize,當前頁pageNo, 20 顯示頁碼數showNum是否非法輸入*/ 21 if( Settings.pagNo < 0 || Settings.pageSize < 0 || Settings.count < 0){ 22 console.error( "請檢查 pagNo,pageSize,count這個三個參數是否存在非法輸入" ); 23 return false; 24 } 25 //如果showNum為非法數值,那么設置為默認值 26 if( Settings.showNum < 0 ){ 27 Setting.showNum = 6; 28 return true; 29 } 30 } 31 32 var JsonPageConstruct = function (pageNo,pageCount,pageSize,showNum) { 33 //構建分頁頁碼的變現形式,返回json字符串 34 //pageNo當前頁碼 35 //pageCount總頁碼數 36 //pageSize每頁顯示條數 37 //showNum顯示幾條頁碼在頁面上 38 var data = ''; 39 if(pageNo == 1){ 40 data = '{"jsonData":[{"text":"上一頁","num":0,"state":"disabled"},'; 41 } 42 else{ 43 data = '{"jsonData":[{"text":"上一頁","num":"'+ ( pageNo - 1 ) +'",'+ 44 '"state":"abled"},'; 45 } 46 /* 47 判斷分頁類型,有兩種情況,第一:pageCount > showNum;第二:pageCount <= 48 showNum; 49 在第一種情況下還會出現如下三種情況; 50 1、pageNo <= showNum + 2; 51 2、showNum + 2 < pageNo <= pageCount - showNum + 3; 52 3、pageCount - showNum + 3 < pageNo <= pageCount; 53 在1的情況下又分為兩種情況: 54 (1)、pageNo <= showNum; 55 (2)、showNum < pageNo <= showNum + 2; 56 在(2)中情況下面要考慮pageNo是否為最后一頁或倒數第二頁,如果是則隱藏... 57 */ 58 if( pageCount > showNum ) { 59 if( pageNo <= showNum + 2 ) { 60 if( pageNo <= showNum ) { 61 for(var i= 1 ;i <= showNum ; i++ ){ 62 if( pageNo == i ) { 63 data += '{"text":"'+ i +'","num":"'+ i +'","state":"active"},'; 64 } 65 else{ 66 data += '{"text":"'+ i +'","num":"'+ i +'","state":"abled"},'; 67 } 68 } 69 if( pageNo == showNum ) { 70 //顯示頁面后面在刷新出一個, 71 //此時i = showNum + 1,這邊之所以能夠訪問到i,是因為js在聲明變量 72 //的時候提升申明了,提升到最前面聲明 73 data += '{"text":"'+ i +'","num":"'+ i +'","state":"abled"},'; 74 } 75 } 76 else{ 77 for (var j = 1; j <= pageNo; j++) { 78 if( pageNo == j ) { 79 data += '{"text":"'+ j +'","num":"'+ j +'","state":"active"},'; 80 } 81 else{ 82 data += '{"text":"'+ j +'","num":"'+ j +'","state":"abled"},'; 83 } 84 } 85 if(pageNo != pageCount){ 86 data += '{"text":"'+ j +'","num":"'+ j +'","state":"abled"},'; 87 } 88 } 89 //如果總頁數pageCount <= showNum + 2,則隱藏... 90 if(pageNo != pageCount){ 91 if(pageNo != (pageCount - 1)){ 92 data+='{"text":"...","num":"more","state":"disabled"},'; 93 } 94 } 95 } 96 else if(pageNo <= pageCount - showNum + 3){ 97 data += '{"text":"1","num":"1","state":"abled"},'; 98 data += '{"text":"2","num":"2","state":"abled"},'; 99 data += '{"text":"...","num":"more","state":"disabled"},'; 100 for (var m = pageNo - 2; m <= pageNo + 2; m++) { 101 if(pageNo == m){ 102 data += '{"text":"'+ m +'","num":"'+ m +'","state":"active"},'; 103 } 104 else{ 105 data += '{"text":"'+ m +'","num":"'+ m +'","state":"abled"},'; 106 } 107 } 108 data += '{"text":"...","num":"more","state":"disabled"},'; 109 } 110 else{ 111 data += '{"text":"1","num":"1","state":"abled"},'; 112 data += '{"text":"2","num":"2","state":"abled"},'; 113 data += '{"text":"...","num":"more","state":"disabled"},'; 114 for (var n = pageCount - showNum + 1; n <= pageCount; n++) { 115 if(pageNo == n){ 116 data += '{"text":"'+ n +'","num":"'+ n +'","state":"active"},'; 117 } 118 else{ 119 data += '{"text":"'+ n +'","num":"'+ n +'","state":"abled"},'; 120 } 121 } 122 } 123 } 124 if(pageNo == pageCount){ 125 data += '{"text":"下一頁","num":"'+ (pageNo + 1) +'","state":"disabled"}]}'; 126 }else{ 127 data += '{"text":"下一頁","num":"'+ (pageNo + 1) +'","state":"abled"}]}'; 128 } 129 var json_return = JSON.parse(data); 130 return json_return; 131 } 132 133 /* 134 將分頁結果顯示到頁面的相應的位置 135 */ 136 function PagingJson(json){ 137 138 if(parseInt(Settings.count)>0){ 139 var html = '<ul class="pagination" style="display:flex;list-style:none;">'; 140 for(var a in json.jsonData){ 141 if(json.jsonData[a].state == "disabled"){ 142 html +='<li id="pageNum'+ json.jsonData[a].num +'" class="disabled" num="'+ json.jsonData[a].num +'" ><a href="javascript:;">'+ json.jsonData[a].text +'</a></li>'; 143 } 144 else if(json.jsonData[a].state == "active"){ 145 html +='<li id="pageNum'+ json.jsonData[a].num +'" class="active" num="'+ json.jsonData[a].num +'" ><a href="javascript:;">'+ json.jsonData[a].text +'</a></li>'; 146 147 }else{ 148 html +='<li id="pageNum'+ json.jsonData[a].num +'" num="'+ json.jsonData[a].num +'" ><a href="javascript:;">'+ json.jsonData[a].text +'</a></li>'; 149 } 150 } 151 $(self).html(html); 152 if(Settings.jumpTo == true){ 153 $(self).find(".pagination").append('<span class="text-muted" style="margin:5px;margin-left:10px;display:inline-block;font-size:18px;font-size:'+ Settings.fontSize +'px">共有'+ pagingCount +'頁/'+ Settings.count +'個</span><div style="display:inline-block" name="changePage"><span class="text-muted" style="margin:5px;margin-left:0px;display:inline-block;font-size:'+ Settings.fontSize +'px">,到第</span> <input type="number" min="1" max="'+ pagingCount +'"class="pagination_change_page" style="width:45px;border-color:#ddd"> <span class="text-muted" style="margin:5px;margin-left:10px;display:inline-block;font-size:font-size:'+ Settings.fontSize +'px">頁</span> <button class="btn btn-default btn-sm pagination_search">'+ Settings.jumpBtnName +'</button></div>'); 154 } 155 }else{ 156 157 } 158 } 159 160 161 162 163 var main = function () {//主函數 164 var check = checkDigit(); 165 if( check == false ){ 166 return false; 167 } 168 var pageNo = parseInt( Settings.pageNo ); 169 var pageSize = parseInt( Settings.pageSize ); 170 var count = parseInt( Settings.count ); 171 if( count % pageSize == 0){ 172 pagingCount = count / pageSize; 173 } 174 else{ 175 pagingCount = parseInt( count / pageSize ) + 1; 176 } 177 var showNum = parseInt( Settings.showNum ); 178 var pageJson = JsonPageConstruct(pageNo,pagingCount,pageSize,showNum); 179 PagingJson(pageJson); 180 $(self).off(); 181 }; 182 main(); 183 184 185 }; 186 })(jQuery)
注意:
一定要引入jquery哦