zoukankan      html  css  js  c++  java
  • 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 //====================================================//

    效果:

  • 相关阅读:
    POJ 3258 (NOIP2015 D2T1跳石头)
    POJ 3122 二分
    POJ 3104 二分
    POJ 1995 快速幂
    409. Longest Palindrome
    389. Find the Difference
    381. Insert Delete GetRandom O(1)
    380. Insert Delete GetRandom O(1)
    355. Design Twitter
    347. Top K Frequent Elements (sort map)
  • 原文地址:https://www.cnblogs.com/zhangmao/p/2998717.html
Copyright © 2011-2022 走看看