博客 - JS/Ajax/AS

利用js实现静态分页

  由于工作上的需要,做了个用js分页的效果。不牵涉到服务器端的语言,所以只有用js来分页。

  把demo提供给大家,原本调xml文档的部分,这里就不提供了。

下载: code1.html
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>js实现静态分页</title>
  6. <style type="text/css">
  7. table.dynamic tbody tr{ display:none;}
  8. table.dynamic tbody tr.show{display:block;}
  9. html>body table.dynamic tbody tr.show{ display:table-row;}
  10. th,td{ padding:5px;}
  11. th{ background:#eef;}
  12. table.pagelist{ border:1px solid #ccc; border-bottom:none; border-right:none; width:500px;}
  13. table.pagelist td,table.pagelist th{ font-size:12px; border:1px solid #ccc; border-top:none; border-left:none;}
  14. p.paginatedNav{ font-size:12px; width:480px; margin-top:8px; text-align:right;}
  15. p.paginatedNav a{ color:#ccc;}
  16. p.paginatedNav a:link,p.paginatedNav a:visited{ color:#369;}
  17. </style>
  18. <script type="text/javascript" src="http://www.11gz.com/DOMhelp.js"></script>
  19. <script type="text/javascript"><!--
  20. pn = {
  21. //css class
  22. paginationClass:'pagelist',
  23. dynamicClass:'dynamic',
  24. showClass:'show',
  25. paginationNavClass:'paginatedNav',
  26.  
  27. //设置每页显示数据条数
  28. increase : 5,
  29. //分页导航的替换文本
  30. counter:'&#160;&#160;_x_到_y_条&#160;&#160;共_z_条&#160;&#160;',
  31. nextLabel:'下一页',
  32. previousLabel:'上一页',
  33.  
  34. init:function(){
  35.      var tablebody;
  36.   if(!document.getElementById || !document.createTextNode){return;}
  37.   var ts=document.getElementsByTagName('table');
  38.   for(var i=0;i<ts.length;i++){
  39.    if(!DOMhelp.cssjs('check',ts[i],pn.paginationClass)){continue;}
  40.    if(ts[i].getElementsByTagName('tr').length<pn.increase+1){continue;}
  41.    tablebody=ts[i].getElementsByTagName('tbody')[0];
  42.    ts[i].datarows=tablebody.getElementsByTagName('tr');
  43.    ts[i].datarowsize=ts[i].datarows.length;
  44.    ts[i].current=null;
  45.    DOMhelp.cssjs('add',ts[i],pn.dynamicClass);
  46.    pn.createPaginationNav(ts[i]);
  47.    pn.showSection(ts[i],0);
  48.   }
  49. },
  50. createPaginationNav:function(table){
  51.   var navBefore,navAfter;
  52.   navBefore=document.createElement('p');
  53.   DOMhelp.cssjs('add',navBefore,pn.paginationNavClass);
  54.   navBefore.appendChild(DOMhelp.createLink('#',pn.previousLabel));
  55.   navBefore.appendChild(document.createElement('span'));
  56.   counter=pn.counter.replace('_x_',1);
  57.   counter=counter.replace('_y_',pn.increase);
  58.   counter=counter.replace('_z_',table.datarowsize-1);
  59.   navBefore.getElementsByTagName('span')[0].innerHTML=counter;
  60.   navBefore.appendChild(DOMhelp.createLink('#',pn.nextLabel));
  61.   table.parentNode.insertBefore(navBefore,table);
  62.   navAfter=navBefore.cloneNode(true);
  63.   table.parentNode.insertBefore(navAfter,table.nextSibling);
  64.   table.topPrev=navBefore.getElementsByTagName('a')[0];
  65.   table.topNext=navBefore.getElementsByTagName('a')[1];
  66.   table.bottomPrev=navAfter.getElementsByTagName('a')[0];
  67.   table.bottomNext=navAfter.getElementsByTagName('a')[1];
  68.   DOMhelp.addEvent(table.topPrev,'click',pn.navigate,false); 
  69.   DOMhelp.addEvent(table.bottomPrev,'click',pn.navigate,false); 
  70.   DOMhelp.addEvent(table.topNext,'click',pn.navigate,false); 
  71.   DOMhelp.addEvent(table.bottomNext,'click',pn.navigate,false); 
  72.   table.bottomNext.onclick=DOMhelp.safariClickFix;
  73.   table.topPrev.onclick=DOMhelp.safariClickFix;
  74.   table.bottomPrev.onclick=DOMhelp.safariClickFix;
  75.   table.topNext.onclick=DOMhelp.safariClickFix;
  76.   table.topCounter=navBefore.getElementsByTagName('span')[0];
  77.   table.bottomCounter=navAfter.getElementsByTagName('span')[0];
  78. },
  79. navigate:function(e){
  80.   var start, table;
  81.   var t=DOMhelp.getTarget(e);
  82.   while(t.nodeName.toLowerCase()!='a'){t=t.parentNode;}
  83.   if(t.getAttribute('href') == null || t.getAttribute('href') == ''){return;}
  84.   if(t.parentNode.previousSibling.nodeName.toLowerCase() == 'table'){
  85.    table=t.parentNode.previousSibling;
  86.   }else{
  87.    table=t.parentNode.nextSibling;
  88.   }
  89.   if(t==table.topNext || t==table.bottomNext){
  90.    start=table.current+pn.increase;
  91.   }else if(t==table.topPrev || t==table.bottomPrev){
  92.    start=table.current-pn.increase;
  93.   }
  94.   pn.showSection(table,start)
  95. },
  96. showSection:function(table,start){
  97.   var i;
  98.   pn.changePaginationNav(table,start);
  99.   if(table.current!=null){
  100.    for(i=table.current;i<table.current+pn.increase;i++){
  101.     if(table.datarows[i]){
  102.      DOMhelp.cssjs('remove',table.datarows[i],pn.showClass);
  103.     }
  104.    }
  105.   }
  106.   for(i=start;i<start+pn.increase;i++){
  107.    if(table.datarows[i]){
  108.     DOMhelp.cssjs('add',table.datarows[i],pn.showClass);
  109.    }
  110.   }
  111.   table.current=start;
  112. },
  113. changePaginationNav:function(table,start){
  114.   if(start-pn.increase<0){
  115.    table.bottomPrev.removeAttribute('href');
  116.    table.topPrev.removeAttribute('href');
  117.   }else{
  118.    table.bottomPrev.setAttribute('href','#');
  119.    table.topPrev.setAttribute('href','#');
  120.   }
  121.   if(start+pn.increase>table.datarowsize-2){
  122.    table.bottomNext.removeAttribute('href');
  123.    table.topNext.removeAttribute('href');
  124.   }else{
  125.    table.bottomNext.setAttribute('href','#');
  126.    table.topNext.setAttribute('href','#');
  127.   }
  128.   var counter=pn.counter.replace('_x_',start+1);
  129.   var last=start+pn.increase;
  130.   if(last>table.datarowsize){last=table.datarowsize;}
  131.   counter=counter.replace('_y_',last);
  132.   counter=counter.replace('_z_',table.datarowsize);
  133.   table.topCounter.innerHTML=counter;
  134.   table.bottomCounter.innerHTML=counter;
  135. }
  136. }
  137. DOMhelp.addEvent(window,'load',pn.init,false);
  138. -->
  139. </script>
  140. </head>
  141. <body>
  142.  
  143. <table class="pagelist" cellspacing="0" cellpadding="0">
  144. <thead>
  145.  <tr><th scope="col">ID</th><th scope="col">作者</th><th scope="col">标题</th><th scope="col">介绍</th></tr>
  146. </thead>
  147. <tbody>
  148.  <tr><th>1</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  149.  <tr><th>2</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  150.  <tr><th>3</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  151.  <tr><th>4</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  152.  <tr><th>5</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  153.  <tr><th>6</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  154.  <tr><th>7</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  155.  <tr><th>8</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  156.  <tr><th>9</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  157.  <tr><th>10</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  158.  <tr><th>11</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  159.  <tr><th>12</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  160.  <tr><th>13</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  161.  <tr><th>14</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  162.  <tr><th>15</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  163.  <tr><th>16</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  164.  <tr><th>17</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  165.  <tr><th>18</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  166.  <tr><th>19</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  167.  <tr><th>20</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  168.  <tr><th>21</th><td>萧涤非 等著</td><td>唐诗鉴赏辞典</td><td>《唐诗鉴赏辞典》为代表的文学鉴赏辞典系列</td></tr>
  169.  <tr><th>22</th><td>左民安</td><td>细说汉字(精装版)</td><td>这是一本介绍汉字基本知识的通俗读物</td></tr>
  170. </tbody>
  171. </table>
  172. </body>
  173. </html>

  你可以下载代码测试效果。

标签:

1 条评论 发表在“利用js实现静态分页”上

  1. heluyao

    原本在蓝色理想的论坛发过这个东西的贴。现在由于域名变更,加上原帖又不能编辑。
    因此帖子里的代码就提示js错误。
    原因是域名变更找不到以前的路径了。

    [回复]

写下您的看法

  • :em02:
  • :em12:
  • :em01:
  • :em03:
  • :em10:
  • :em18:
  • :em06:
  • :em07:
  • :em13:
  • :em08:
  • :em11:
  • :em17:
  • :em16:
  • :em05:
  • :em15:
  • :em09:
  • :em14:
  • :em04:

仅支持“a、abbr、strong、em、blockquote、code”几个简单的标签