局部刷新

一个简单js分页插件,水平有限,能者勿喷。大笑

 

(一)splitPage.js分页插件

Java代码    收藏代码
  1. /*** 
  2.  * 功能:局部刷新分页显示表格内容 
  3.  * 作者:Tina
  4.  * 版本:1.0 
  5.  * 备注:自己封装的局部刷新分页插件,主要是想了解一下分页插件是如何运作的 
  6.  * 缺陷:水平有限,插件很不灵活,还有两个硬编码块 
  7.  * 建议:大家还是下载专门的js分页插件来进行使用吧(本代码可供参考) 
  8. */  
  9.   
  10. /** 
  11.  * 帮助文档: 
  12.  * 1.结合jQuery.js来进行使用 
  13.  * 2.提供了两个方法可供调用 
  14.  *  方法一:splitPage(tableID,tableHeadName,tableData,checkboxRow) 
  15.  *      参数详解[ 
  16.  *          tableID:需要用户在jsp页面写一个空的表格并赋予id值 
  17.  *          tableHeadName:表头内容(格式如:["图书ID","图书名称","图书价格","入库时间"]) 
  18.  *          tableData:数据源(后台查到的list集合[可以是json字符串][也可以是json字符串解析过后的对象数组]) 
  19.  *          checkboxRow:boolean类型([true:表示显示多选框][false:不显示多选框]) 
  20.  *      ] 
  21.  *  
  22.  *  方法二:getCheckedBoxs() 
  23.  *      返回值详解[ 
  24.  *          (null):表示用户没有选择任何一条记录 
  25.  *          (a):表示用户选择了一条记录 
  26.  *          (a,b,c..z):表示用户选择了多条记录 
  27.  *      ] 
  28.  *      友情提示[ 
  29.  *          关于用户到底选择了一条还是多条,可以通过 indexOf(",")>0 来进行判断 
  30.  *          即:如果返回的字符串包含',',就表示有选择了多条记录 
  31.  *      ] 
  32.  * 3.关于硬编码块 
  33.  *  硬编码块-:initTableData() 
  34.  *      解释[ 
  35.  *          水平有限,遍历集合数据时,只能按照JavaBean里面的属性顺序遍历 
  36.  *          有(不需要显示的字段)和(需要转换格式的字段),需要用户手动在本方法里面添加if块 
  37.  *          格式如下: 
  38.  *              if(filedName=="该字段名称") 
  39.  *              { 
  40.  *                  具体操作 
  41.  *                  continue; 
  42.  *              } 
  43.  *      ] 
  44.  *  硬编码块二:getBoxValue() 
  45.  *      解释[ 
  46.  *          水平有限,获取用户选择的多选框时,把多选框的值拼成字符串返回 
  47.  *          默认是把 该多选框的下一个单元格内容的值 赋给多选框 
  48.  *          用户可以根据需求更改此块,格式如下: 
  49.  *          obj.parentNode.nextSibling.firstChild.nodeValue 
  50.  *         当前对象   父元素    下一个兄弟元素   第一个子元素   节点值 
  51.  *      ] 
  52.  *  
  53. */  
  54.   
  55. /** 
  56.  * [用户可调用]分页方法 
  57. */  
  58. function splitPage(tableID,tableHeadName,tableData,checkboxRow)  
  59. {  
  60.     initPageData(tableID,tableHeadName,tableData,checkboxRow);  
  61. }  
  62.   
  63. /** 
  64.  * [不可调用]初始化页面方法(默认第一页,每页5条) 
  65. */  
  66. function initPageData(tableID,tableHeadName,tableData,checkboxRow)  
  67. {  
  68.     var page=1;  
  69.     var pageSize=5;  
  70.     doSplitPage(tableID,tableHeadName,tableData,page,pageSize,checkboxRow);   
  71. }  
  72.   
  73. /** 
  74.  * [不可调用]真正分页方法 
  75. */  
  76. function doSplitPage(tableID,tableHeadName,tableData,page,pageSize,checkboxRow)  
  77. {  
  78.     var listCount;  
  79.     var pageCount;  
  80.     if(typeof(tableData)=="string")  
  81.     {  
  82.         tableData=tableData.replace(/\%/g,"\"");   
  83.         tableData=eval("("+tableData+")");  
  84.     }  
  85.     if(typeof(tableHeadName)=="string")  
  86.     {  
  87.         tableHeadName=tableHeadName.split(",");  
  88.     }  
  89.     listCount=tableData.length;  
  90.     pageCount=parseInt(listCount/pageSize) + (listCount%pageSize==0?0:1);  
  91.     showTableData(tableID,tableHeadName,tableData,listCount,page,pageSize,pageCount,checkboxRow);  
  92. }  
  93.   
  94. /** 
  95.  * [不可调用]渲染 表格 方法 
  96. */  
  97. function showTableData(tableID,tableHeadName,tableData,listCount,page,pageSize,pageCount,checkboxRow)  
  98. {  
  99.     var colspanCell=tableHeadName.length;  
  100.     $("#"+tableID+" tr").remove();  
  101.     initTableHead(tableID,tableHeadName,checkboxRow);  
  102.     initTableData(tableID,tableData,listCount,page,pageSize,pageCount,checkboxRow);  
  103.     initTableFoot(tableID,tableHeadName,tableData,listCount,page,pageSize,pageCount,colspanCell,checkboxRow);  
  104. }  
  105.   
  106. /** 
  107.  * [不可调用]渲染 表头 方法 
  108. */  
  109. function initTableHead(tableID,tableHeadName,checkboxRow)  
  110. {  
  111.     var initHeadLine="<tr>";  
  112.     if(checkboxRow.toString()=="true")  
  113.     {  
  114.         initHeadLine+='<td><input type="checkbox" id="parent" οnclick="choiceBoxStatus(this);" /></td>';  
  115.     }  
  116.     for(var i=0;i<tableHeadName.length;i++)  
  117.     {  
  118.         initHeadLine+="<td>"+tableHeadName[i]+"</td>";  
  119.     }  
  120.     initHeadLine+="</tr>";  
  121.     $("#"+tableID).append(initHeadLine);  
  122. }  
  123.   
  124. /** 
  125.  * [不可调用]渲染 表格数据 方法 
  126. */  
  127. function initTableData(tableID,tableData,listCount,page,pageSize,pageCount,checkboxRow)  
  128. {  
  129.     var firstLine=parseInt((page-1)*pageSize);  
  130.     var lastLine=parseInt((page-1)*pageSize)+parseInt(pageSize);  
  131.     if(page==pageCount)  
  132.     {  
  133.         lastLine=firstLine+(listCount-((pageCount-1)*pageSize));  
  134.     }  
  135.     for(var i=firstLine;i<lastLine;i++)  
  136.     {  
  137.         var initDataLine="<tr>";  
  138.         if(checkboxRow.toString()=="true")  
  139.         {  
  140.             initDataLine+='<td><input type="checkbox" name="kid" οnclick="getBoxValue(this);"/></td>';  
  141.         }  
  142.         for(var filedName in tableData[i]){  
  143.             if(filedName=="ctime")  
  144.             {  
  145.                 var ctime=new Date(tableData[i][filedName]);  
  146.                 var year = ctime.getFullYear();  
  147.                 var month = ctime.getMonth()+1;//js从0开始取   
  148.                 var date = ctime.getDate();   
  149.                 var hour = ctime.getHours();   
  150.                 var minutes = ctime.getMinutes();   
  151.                 var second = ctime.getSeconds();  
  152.                 ctime=year+"年"+month+"月"+date+"日 "+hour+"时"+minutes +"分"+second+"秒";  
  153.                 initDataLine+="<td>"+ctime+"</td>";  
  154.                 continue;  
  155.             }  
  156.             initDataLine+="<td>"+tableData[i][filedName]+"</td>";   
  157.         }    
  158.         initDataLine+="</tr>";  
  159.         $("#"+tableID).append(initDataLine);  
  160.     }  
  161. }  
  162.   
  163. /** 
  164.  * [不可调用]渲染 表格尾行提示 方法 
  165. */  
  166. function initTableFoot(tableID,tableHeadName,tableData,listCount,page,pageSize,pageCount,colspanCell,checkboxRow)  
  167. {  
  168.     tableData=JSON.stringify(tableData).replace(/\"/g,"\%");  
  169.     if(checkboxRow.toString()=="true")  
  170.     {  
  171.         colspanCell=parseInt(colspanCell+1);  
  172.     }  
  173.     var initFootLine="<tr><td colspan='"+colspanCell+"' align='center' id='tableFootInfo'></td></tr>";  
  174.     $("#"+tableID).append(initFootLine);  
  175.     var footInfoID="tableFootInfo";  
  176.     $("#"+footInfoID).append("<select id='tableSize' οnchange='changeTableSize(\""+tableID+"\",\""+tableHeadName+"\",\""+tableData+"\",\""+page+"\",\""+pageSize+"\",\""+checkboxRow+"\");'><option value='5' "+(pageSize==5?"selected='selected'":"")+">每页5条</option><option value='10' "+(pageSize==10?"selected='selected'":"")+">每页10条</option><option value='15' "+(pageSize==15?"selected='selected'":"")+">每页15条</option></select>"+"&nbsp;&nbsp;&nbsp;&nbsp;");  
  177.     showFirstInfo(tableID,tableHeadName,tableData,page,pageSize,pageCount,footInfoID,checkboxRow);  
  178.     showPrevInfo(tableID,tableHeadName,tableData,page,pageSize,pageCount,footInfoID,checkboxRow);  
  179.     showNextInfo(tableID,tableHeadName,tableData,page,pageSize,pageCount,footInfoID,checkboxRow);  
  180.     showLastInfo(tableID,tableHeadName,tableData,page,pageSize,pageCount,footInfoID,checkboxRow);  
  181.     $("#"+footInfoID).append("&nbsp;&nbsp;&nbsp;&nbsp;"+"当前是"+page+"/"+pageCount+"页");  
  182.     $("#"+footInfoID).append("&nbsp;&nbsp;&nbsp;&nbsp;"+"共计"+listCount+"条数据");  
  183. }  
  184.   
  185. /** 
  186.  * [不可调用]渲染 首页 方法 
  187. */  
  188. function showFirstInfo(tableID,tableHeadName,tableData,page,pageSize,pageCount,footInfoID,checkboxRow)  
  189. {  
  190.     if(page!=1)  
  191.     {  
  192.         page=1;  
  193.         $("#"+footInfoID).append("<a href='JavaScript:void(0);' οnclick='doSplitPage(\""+tableID+"\",\""+tableHeadName+"\",\""+tableData+"\",\""+page+"\",\""+pageSize+"\",\""+checkboxRow+"\");'>首页</a>");  
  194.     }else  
  195.     {  
  196.         $("#"+footInfoID).append("首页");  
  197.     }  
  198. }  
  199.   
  200. /** 
  201.  * [不可调用]渲染 上一页 方法 
  202. */  
  203. function showPrevInfo(tableID,tableHeadName,tableData,page,pageSize,pageCount,footInfoID,checkboxRow)  
  204. {  
  205.     if(page>1)  
  206.     {  
  207.         page=parseInt(page)-1;  
  208.         $("#"+footInfoID).append("<a href='JavaScript:void(0);' οnclick='doSplitPage(\""+tableID+"\",\""+tableHeadName+"\",\""+tableData+"\",\""+page+"\",\""+pageSize+"\",\""+checkboxRow+"\");'>上一页</a>");  
  209.     }  
  210.     else  
  211.     {  
  212.         $("#"+footInfoID).append("上一页");  
  213.     }  
  214. }  
  215.   
  216. /** 
  217.  * [不可调用]渲染 下一页 方法 
  218. */  
  219. function showNextInfo(tableID,tableHeadName,tableData,page,pageSize,pageCount,footInfoID,checkboxRow)  
  220. {  
  221.     if(page<pageCount)  
  222.     {  
  223.         page=parseInt(page)+1;  
  224.         $("#"+footInfoID).append("<a href='JavaScript:void(0);' οnclick='doSplitPage(\""+tableID+"\",\""+tableHeadName+"\",\""+tableData+"\",\""+page+"\",\""+pageSize+"\",\""+checkboxRow+"\");'>下一页</a>");  
  225.     }  
  226.     else  
  227.     {  
  228.         $("#"+footInfoID).append("下一页");  
  229.     }  
  230. }  
  231.   
  232. /** 
  233.  * [不可调用]渲染 末页 方法 
  234. */  
  235. function showLastInfo(tableID,tableHeadName,tableData,page,pageSize,pageCount,footInfoID,checkboxRow)  
  236. {  
  237.     if(page!=pageCount && pageCount!=0)  
  238.     {  
  239.         page=pageCount;  
  240.         $("#"+footInfoID).append("<a href='JavaScript:void(0);' οnclick='doSplitPage(\""+tableID+"\",\""+tableHeadName+"\",\""+tableData+"\",\""+page+"\",\""+pageSize+"\",\""+checkboxRow+"\");'>末页</a>");  
  241.     }  
  242.     else  
  243.     {  
  244.         $("#"+footInfoID).append("末页");          
  245.     }  
  246. }  
  247.   
  248. /** 
  249.  * [不可调用]改变表格记录条数 
  250. */  
  251. function changeTableSize(tableID,tableHeadName,tableData,page,pageSize,checkboxRow)  
  252. {  
  253.     page=1;  
  254.     pageSize=$("#tableSize").val();  
  255.     doSplitPage(tableID,tableHeadName,tableData,page,pageSize,checkboxRow);  
  256. }  
  257.   
  258. /** 
  259.  * [不可调用]全选/全不选 
  260. */  
  261. function choiceBoxStatus(obj)  
  262. {  
  263.     var boxs=document.getElementsByName("kid");  
  264.     for(var i=0;i<boxs.length;i++)  
  265.     {  
  266.         boxs[i].checked=obj.checked;  
  267.         getBoxValue(boxs[i]);  
  268.     }  
  269. }  
  270.   
  271. /** 
  272.  * [不可调用]给多选框赋值 
  273. */  
  274. function getBoxValue(obj)  
  275. {  
  276.     var boxValue=obj.parentNode.nextSibling.firstChild.nodeValue;  
  277.     obj.value=boxValue;  
  278. }  
  279.   
  280. /** 
  281.  * [用户可调用]获取选择的多选框的id字符串 
  282. */  
  283. function getCheckedBoxs()  
  284. {  
  285.     var boxs=document.getElementsByName("kid");  
  286.     var ids="";  
  287.     var boxIDS="";  
  288.     for(var i=0;i<boxs.length;i++)  
  289.     {  
  290.         if(boxs[i].checked)  
  291.         {  
  292.             boxIDS+=boxs[i].value+",";  
  293.         }  
  294.     }  
  295.     ids=boxIDS.substring(0, boxIDS.length-1);  
  296.     if(ids.length==0)  
  297.     {  
  298.         ids=null;  
  299.     }  
  300.     return ids;  
  301. }  
  302.   
  303. /** 
  304.  * ---end--- 
  305. */  

 

(二)使用帮助

本插件提供了两个方法可被调用

方法一:splitPage(tableID,tableHeadName,tableData,checkboxRow) 
          核心方法:进行局部刷新分页

方法二:getCheckedBoxs() 
          辅助方法:返回 用户所选择的记录id 拼成的字符串

splitPage 参数介绍:

参数 备注
tableID需要用户在jsp页面写一个空的表格并赋予id值
tableHeadName表头内容(格式如:[“图书ID”,”图书名称”])
tableData数据源(后台查到的list集合)[可以是json字符串][也可以是json字符串解析过后的对象数组]
checkboxRowboolean类型:[true:表示显示多选框][false:不显示多选框]

getCheckedBoxs 返回值介绍:

返回值 备注
null表示用户没有选择任何一条记录
a表示用户选择了一条记录
a,b,c…z表示用户选择了多条记录

提示: 
关于用户到底选择了一条还是多条,可以通过 indexOf(“,”)>0 来进行判断 
即:如果返回的字符串包含’,’,就表示有选择了多条记录

 

(三)使用案例

jsp页面代码:

Html代码    收藏代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
  4. <%@ taglib prefix="format" uri="http://java.sun.com/jsp/jstl/fmt" %>  
  5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  6. <html>  
  7. <head>  
  8. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  9. <title>列表</title>  
  10.   
  11. <!-- 调用jQuery.js -->  
  12. <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery-1.9.1.js"></script>  
  13. <!-- 调用splitPage.js -->  
  14. <script type="text/javascript" src="<%=request.getContextPath()%>/js/splitPage.js"></script>  
  15.   
  16. <!-- 方法块 -->  
  17. <script type="text/javascript">  
  18.   
  19. $(document).ready(function(){  
  20.     $.ajax({  
  21.         type:"post",  
  22.         url:"<%=request.getContextPath()%>/doList.action",  
  23.         data:{},  
  24.         dataType:"json",  
  25.         success:function(data)  
  26.         {  
  27.             var TableID="bookTable";  
  28.             var TableHeadName=["图书ID","图书名称","图书价格","入库时间"];  
  29.             var TableData=data;  
  30.             var CheckboxRow=true;  
  31.   
  32.             splitPage(TableID,TableHeadName,TableData,CheckboxRow);  
  33.         }  
  34.     });  
  35. });  
  36.   
  37. function insert()  
  38. {  
  39.     location.href="<%=request.getContextPath()%>/toAddPage.action";  
  40. }  
  41.   
  42. function update()  
  43. {  
  44.     var result=getCheckedBoxs();  
  45.     if(result==null)  
  46.     {  
  47.         alert("请选择要修改的语句!");  
  48.     }else if(result.indexOf(",")>0)  
  49.     {  
  50.         alert("您选择了多条语句!");  
  51.     }else  
  52.     {  
  53.         location.href="<%=request.getContextPath()%>/toUpdatePage.action?id="+result;  
  54.     }  
  55. }  
  56.   
  57. function del()  
  58. {  
  59.     var result=getCheckedBoxs();  
  60.     if(result==null)  
  61.     {  
  62.         alert("请选择要删除的语句!");  
  63.     }else if(result.indexOf(",")>0)  
  64.     {  
  65.         var pro=confirm("请问您是否要删除您选中的多条记录?");  
  66.         if(pro)  
  67.         {  
  68.             location.href="<%=request.getContextPath()%>/doDelAll.action?id="+result;  
  69.         }  
  70.     }else  
  71.     {  
  72.         var pro=confirm("请问您是否要删除该记录?");  
  73.         if(pro)  
  74.         {  
  75.             location.href="<%=request.getContextPath()%>/doDel.action?id="+result;  
  76.         }  
  77.     }  
  78. }  
  79. </script>  
  80.   
  81. </head>  
  82.   
  83. <body>  
  84.     <div>  
  85.         <input type="button" value="添加" onclick="insert();"/>  
  86.         <input type="button" value="修改" onclick="update();"/>  
  87.         <input type="button" value="删除" onclick="del();"/>  
  88.     </div>  
  89.     <table border="1" id="bookTable"></table>  
  90. </body>  
  91. </html>  

 

欢迎大神指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值