Web前端开发之——表格高级排序(字符串,日期,整型,浮点型,以及图片等)

在项目中,经常会碰表格排序,最近整理了一个表格排序包括字符串,日期,整型,浮点型,以及图片等高级排序,将服务器功能转移到前端实现,减轻了服务器压力,功能比较强大。

 1     (function () {  
 2         /** 
 3             @ Author: Kingwell leng 
 4             @ Date  : 2012-8-22 
 5             @ Blog  : http://kingwell-leng.iteye.com/ 
 6             @ Email : jinhua.leng##gmail.com 
 7         */  
 8         //创建闭包以及下面的空间命名,避免项目开发中与其它内容有冲突  
 9         if (!window.kw) {  
10             window.kw = {};  
11         };  
12         kw = {  
13             convert : function (sValue, sDataType) { //类型转,根据不同类型数据排序,比如,整型,日期,浮点,字符串,接受两个参数,一个是值,一个是排序的数据类型  
14                 switch (sDataType) {  
15                 case "int":  
16                     return parseInt(sValue);  
17                 case "float":  
18                     return parseFloat(sValue);  
19                 case "date":  
20                     return new Date(Date.parse(sValue));  
21                 default:  
22                     return sValue.toString();  
23                 }  
24             },  
25             geterateCompareTRs : function (iCol, sDataType) { //比较函数,用于sort排序用  
26                 return function compareTRs(oTR1, oTR2) {  
27                     var vValue1,  
28                     vValue2;  
29                     if (oTR1.cells[iCol].getAttribute("value")) { //用于高级排序,比如图片,添加一个额外的属性来排序  
30                         vValue1 = kw.convert(oTR1.cells[iCol].getAttribute("value"), sDataType);  
31                         vValue2 = kw.convert(oTR2.cells[iCol].getAttribute("value"), sDataType);  
32                     } else {  
33                         vValue1 = kw.convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType);  
34                         vValue2 = kw.convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);  
35                     }  
36                     if (vValue1 < vValue2) {  
37                         return -1;  
38                     } else if (vValue1 > vValue2) {  
39                         return 1;  
40                     } else {  
41                         return 0;  
42                     }  
43                 }  
44             },  
45             tabSort : function (sTableID, iCol, sDataType) { //排序函数,sTableID为目标,iCol哪列排序,为必需,sDataType可选  
46                 var oTable = document.getElementById(sTableID);  
47                 var oTBody = oTable.tBodies[0];  
48                 var colDataRows = oTBody.rows;  
49                 var aTRs = [];  
50                 for (var i = 0; i < colDataRows.length; i++) {  
51                     aTRs[i] = colDataRows[i];  
52                 };  
53                 if (oTable.sortCol == iCol) { //如果已经排序,则倒序  
54                     aTRs.reverse();  
55                 } else {  
56                     aTRs.sort(this.geterateCompareTRs(iCol, sDataType));  
57                 }  
58                 var oFragment = document.createDocumentFragment();  
59                 for (var j = 0; j < aTRs.length; j++) {  
60                     oFragment.appendChild(aTRs[j]);  
61                 };  
62                 oTBody.appendChild(oFragment);  
63                 oTable.sortCol = iCol; //设置一个状态  
64             }  
65         };  
66     })();  

 

 

 

 1  <!DOCTYPE html>  
 2     <html xmlns="http://www.w3.org/1999/xhtml" lang="zh-cn">  
 3     <head>  
 4     <title>kingwell</title>  
 5     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
 6     <style type="text/css">  
 7     html,body{font-family:Arial, Helvetica, sans-serif; font-size:12px}  
 8     table{ border-collapse:collapse}  
 9     td,th{padding:5px; border:1px solid #CCC; font-weight:lighter;}  
10     th{ cursor:pointer}  
11     </style>  
12     <script type="text/javascript">  
13       
14     </script>  
15     </head>  
16     <body>  
17     <table width="400"  id="tab">  
18         <thead>  
19             <tr>  
20                 <th width="100" onclick="kw.tabSort('tab',0)">First Name</th>  
21                 <th width="100" onclick="kw.tabSort('tab',1)">Last Name</th>  
22                 <th width="100" onclick="kw.tabSort('tab',2,'date')">Date</th>  
23                 <th width="100" onclick="kw.tabSort('tab',3,'int')">Int</th>  
24             </tr>  
25         </thead>  
26         <tbody>  
27       <tr>  
28         <td>Kingwell</td>  
29         <td>Leng</td>  
30         <td>3/10/2012</td>  
31         <td>1</td>  
32       </tr>  
33       <tr>  
34         <td>1aJim</td>  
35         <td>Green</td>  
36         <td>3/5/2012</td>  
37         <td>2</td>  
38       </tr>  
39       <tr>  
40         <td>Kate</td>  
41         <td>Bin</td>  
42         <td>1/2/2012</td>  
43         <td>3</td>  
44       </tr>  
45       <tr>  
46         <td>Zte</td>  
47         <td>Ri</td>  
48         <td>5/3/2012</td>  
49         <td>33</td>  
50       </tr>  
51       <tr>  
52         <td>Bee</td>  
53         <td>Dd</td>  
54         <td>8/1/2012</td>  
55         <td>15</td>  
56       </tr>  
57       </tbody>  
58     </table>  
59       
60       
61     </body>  
62     </html>  

 

 为了现实结构,表现,行为相分离的原则,尽量与HTML分离,这里只是为了演示而矣。

 

posted @ 2012-09-06 16:27  kingwell  阅读(1892)  评论(1编辑  收藏  举报