JavaScript 分页控件的实现

网上看到很多的分页,都做的很棒,想自己来实现一个,学习JS是从2012年开始的,一直在摸索着,今天有幸对call和applay方法的顿悟!顿时一片开朗!我才明白这两个方法多么的强大!奉上菜鸟的分页实现代码吧:


html部分很简单:

一个DIV包着一张表格,然后就是分页的html代码,这个可以封装到JS里面的:

 <table id="pageTable">
        <tr>
           /*****这里可写可不写,JS会替换这里的代码*****/
        </tr>
 </table>
<!-- 分页的html -->
<div class="bm bw0 pgs cl mtm">
        <span id="fd_page_bottom">
        <div class="pg">
            <a class="prev" id="prev" href="javascript:;">上一页</a>
            <div id="pageWrap"></div>
            <label>
                <input type="text" title="输入页码,按回车快速跳转" size="2" class="px" name="custompage">
                <span id="pageThat"></span>
            </label>
            <a href="javascript:;" id="pageAllText"></a>
            <a class="nxt" id="next" href="javascript:;">下一页</a>
        </div>
        </span>
 </div> 

JS部分:

  1 /*
  2  * 需求分析
  3  * 要显示一共有多少页的功能
  4  * 每页显示的有多少条数据
  5  * 加载到内存中,然后去读
  6  * 按需加载
  7  * */
  8 
  9 //一共有多少页// 每页显示多少条数据 //一共有多少条数据
 10 var pageNum = 0, dataNum = 5, dataAll = 0;
 11 
 12 var dataOjb = document.getElementById("pageTable");
 13 
 14 dataAll = dataOjb.tBodies[0].rows.length;
 15 
 16 /*
 17  * 显示页面分页数:
 18  * 根据可分的页面数,加载多少个分页标签
 19  * 每一个标签携带一个多少页的数据
 20  * 如果是分页大于10,那么10后面的分页标签显示省略号一个标签来代替
 21  * 显示最后一个*分页符号
 22  */
 23 //显示页数和条数的方法
 24 function showPageTiao(dataObj) {
 25 
 26     dataAll = dataObj.length;
 27 
 28     var pageShow = document.getElementById("pageAllText"),
 29         pageShowText = "共 " + dataAll + " 条数据";
30 pageShow.setAttribute("title", pageShowText); 31 pageShow.innerHTML = pageShowText; 32 } 33 34 /* 35 每一个分页标签接受点击事件 36 传递分页参数,调用分页的核心方法 37 改变分页标签的样式 38 以上是分页标签触发事件时要做的 39 */ 40 41 //分页外围的DIV 42 var pageWrap = document.getElementById("pageWrap"); 43 44 /*这里是一批测试的数据*/ 45 var newData = [ 46 '<tr><td>1</td><td>的算法的发送到</td><td>1212</td><td>sdfsf</td><td>2012、1、2</td></tr>', 47 '<tr><td>22</td><td>的算法的发送到</td><td>1212</td><td>sdfsf</td><td>2012、1、2</td></tr>' 48 ] 49 50 51 //创建新的分页数据 52 function createPageData(trDataObj, dataPage, t) { 53 54 //显示的数据源 //分页数 // 显示多少条 55 //分页数其实就是从数据源的什么地方开始读 56 57 58 for (var i = 0; i < t; i++) { 59 var newTr = dataOjb.tBodies[0]; 60 var createTr = document.createElement("tr"); 61 //插入数据 62 createTr.innerHTML = trDataObj[ (dataPage - 1) * t + i].innerHTML || 63 trDataObj[ (dataPage - 1) * t + i] || "没有数据... "; 64 65 newTr.appendChild(createTr); 67 } 69 } 70 71 72 //显示分页数 73 function pagingShow(dataSource) { 74 75 var p = parseInt(dataSource.length / dataNum); 76 77 //分页标签 78 for (var k = 1; k <= p; k++) { 79 80 var pageTag = document.createElement("a"); 81 pageTag.setAttribute("href", 'javascript:;'); 82 pageTag.setAttribute("page", k); 83 pageTag.innerHTML = k; 84 85 //10页以上的分页 86 if (k > 10) { 87 pageTag.style.display = "none"; 88 //10以下的分页 89 if (k == p) { 90 pageTag.setAttribute("class", "last"); 91 pageTag.style.display = "block"; 92 pageTag.innerHTML = "... " + k; 93 } 94 } 96 pageWrap.appendChild(pageTag); 97 } 99 } 100 101 102 //绑定事件的闭包 103 function pageClik() { 104 105 for (var i = 0; i < pageWrap.childNodes.length; i++) { 106 (function () { 107 var that = i; //火狐 108 pageWrap.childNodes[that].addEventListener("click", function (event) { 109 //获取分页数 110 var pageNumber = parseInt(this.getAttribute("page")); 111 //调用分页方法 //传递分页参数 112 113 paging(newData, pageNumber, 5); 114 pageThat(pageNumber); 115 116 this.setAttribute("id", "active");117 118 showPageTiao(newData); 119 120 return false; 121 }, false); 122 123 })(); 124 } 125 } 126 127 128 //分页操作的关键方法 //接受一个参数//这个参数决定显示第几个分页 129 function paging(dataObj, num, pageNum) { 130 131 var dataOjbs = document.getElementById("pageTable"); 132 133 //删除旧的数据 134 for (var i = 0, j = dataOjbs.rows.length; j >= i; j--) { 135 dataOjbs.deleteRow(j - 1); 136 } 137 138 for (var i = 0; i < pageWrap.childNodes.length; i++) { 139 pageWrap.childNodes[i].removeAttribute("id"); 140 } 141 142 //激活分页选项 143 pageWrap.childNodes[num - 1].setAttribute("id", "active"); 144 145 //插入新数据 // 传递三个参数:数据对象,显示数,分页数 146 createPageData(dataObj, num, pageNum); 147 148 } 149 150 //显示当前是多少页 151 function pageThat(num) { 152 153 var pageThat = document.getElementById("pageThat"); 154 pageThat.innerHTML = "当前第 " + num + " 页"; 155 156 } 157 158 159 var prevs = document.getElementById("prev"); 160 var nexts = document.getElementById("next"); 161 162 prevs.addEventListener("click", function () { 163 prevPage(); 164 }, false); 165 166 nexts.addEventListener("click", function () { 167 nextPage(); 168 }, false); 169 170 171 //上一页的操作方法 172 //获取激活项的索引//在原有的页上自加1 173 function prevPage() { 174 175 showPageTiao(newData); 176 177 var prev = document.getElementById("active"); 178 179 if (!prev.previousSibling) { 180 return; 181 } else { 182 183 var prevActive = parseInt(prev.previousSibling.getAttribute("page")); 184 185 prev.removeAttribute("id"); 186 prev.previousSibling.setAttribute("id", "active"); 187 188 paging(newData, prevActive, 5); 189 pageThat(prevActive); 190 191 } 192 193 194 } 195 196 //下一页的操方法 197 //获取激活项的索引//在原有的页上自减1 198 function nextPage() { 199 200 showPageTiao(newData); 201 202 var next = document.getElementById("active"); 203 204 if (!next.nextSibling) { 205 return; 206 } else { 207 var nextActive = parseInt(next.nextSibling.getAttribute("page")); 208 209 next.removeAttribute("id"); 210 next.nextSibling.setAttribute("id", "active"); 211 212 paging(newData, nextActive, 5); 213 pageThat(nextActive); 214 } 215 } 216 217 218 //========================初始化======================// 219 //存储要显示的行数据 220 var oldData = []; 221 222 for (var i = 0; i < dataAll; i++) { 223 oldData.push(dataOjb.tBodies[0].rows[i]); 224 } 225 226 //删除旧的数据 227 for (var i = 0, j = dataOjb.rows.length; j >= i; j--) { 228 dataOjb.deleteRow(j - 1); 229 } 230 231 //重新设置条数 232 //分页数 233 pagingShow(newData); 234 235 pageClik(); 236 237 pageThat(1); 238 239 //总条数 240 showPageTiao(oldData); 241 242 paging(oldData, 1, 5); 243 //====================================================//

效果:

原文地址:https://www.cnblogs.com/zhangmao/p/2998717.html