非常强大的table根据表头排序,点击表头名称,对其内容排序

非常强大的table根据表头排序,点击表头名称,对其内容排序

js代码:

 1     /**
 2      * 通过表头对表列进行排序
 3      *
 4      * @param sTableID
 5      *            要处理的表ID<table id=''>
 6      * @param iCol
 7      *            字段列id eg: 0 1 2 3 ...
 8      * @param sDataType
 9      *            该字段数据类型 int,float,date 缺省情况下当字符串处理
10      */
11     function  orderByName(sTableID, iCol, sDataType) {
12          var  oTable = document.getElementById(sTableID);
13          var  oTBody = oTable.tBodies[0];
14          var  colDataRows = oTBody.rows;
15          var  aTRs =  new  Array;
16          for  (  var  i = 0; i < colDataRows.length; i++) {
17             aTRs[i] = colDataRows[i];
18         }
19          if  (oTable.sortCol == iCol) {
20             aTRs.reverse();
21         }  else  {
22             aTRs.sort(generateCompareTRs(iCol, sDataType));
23         }
24          var  oFragment = document.createDocumentFragment();
25          for  (  var  j = 0; j < aTRs.length; j++) {
26             oFragment.appendChild(aTRs[j]);
27         }
28         oTBody.appendChild(oFragment);
29         oTable.sortCol = iCol;
30     }
31     
32     
33     /**
34      * 处理排序的字段类型
35      *
36      * @param sValue
37      *            字段值 默认为字符类型即比较ASCII码
38      * @param sDataType
39      *            字段类型 对于date只支持格式为mm/dd/yyyy或mmmm dd,yyyy(January 12,2004)
40      * @return
41      */
42     function  convert(sValue, sDataType) {
43          switch  (sDataType) {
44          case   "int" :
45              return  parseInt(sValue);
46          case   "float" :
47              return  parseFloat(sValue);
48          case   "date" :
49              return   new  Date(Date.parse(sValue));
50          default :
51              return  sValue.toString();
52         }
53     }
54     
55     
56     /**
57      * 比较函数生成器
58      *
59      * @param iCol
60      *            数据行数
61      * @param sDataType
62      *            该行的数据类型
63      * @return
64      */
65     function  generateCompareTRs(iCol, sDataType) {
66          return   function  compareTRs(oTR1, oTR2) {
67             vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType);
68             vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);
69              if  (vValue1 < vValue2) {
70                  return  -1;
71             }  else   if  (vValue1 > vValue2) {
72                  return  1;
73             }  else  {
74                  return  0;
75             }
76         };
77     }

在table表中需要排序的列头添加事件,调用orderByName(sTableID, iCol, sDataType)即可.

三个参数第一个是表的id,第二个参数是第几列,第三个参数是类型,不写即为字符型.

注意列头如果不参与排序,放在另一个table中即可.

jsp部分示例代码:

              <table width="100%" border="0" cellpadding="0" cellspacing="0" class="import_tab" align="center">
                            <tbody>
                                <tr>
                                <td width="11%" class="borderTh" title="查询名称为空即其没有查询结果">名称(查询)</td>
                                <td width="6%" class="borderTh" title="经营状态为空表示其没有查询结果">经营状态</td>
                                <td width="11%" class="borderTh" title="点击可排序;Ctrl+F查找" onclick="orderByName('resultTab',2);">名称(所填企业名)</td>
                                <td width="10%" class="borderTh" >统一社会信用代码</td>
                                <td width="7%" class="borderTh" title="点击可排序" onclick="orderByName('resultTab',4,Date);">申请日期</td>
                                </tr>
                            </tbody>    
                        </table>        
                        <table id="resultTab" width="100%" border="0" cellpadding="0" cellspacing="0" class="import_tab" align="center">        
                            <tbody>
                            <c:forEach items="${listItems}" var="wgl"  varStatus="num">
                                <tr> 
                                <td width="11%" class="borderTh" >${wgl.entname}</td>
                                <td width="6%" class="borderTh">${wgl.entstatus}</td>
                                <td width="11%" class="borderTh">${wgl.userName}</td>
                                <td width="10%" class="borderTh">${wgl.appCertificateNum}</td>
                                <td width="7%" class="borderTh"><fmt:formatDate value="${wgl.appDate}" type="date" dateStyle="long" /></td>
                                </tr>
                            </c:forEach>
                            </tbody>
                        </table> 

如 日期排序的效果,再点击即可转换顺序排序展示

posted @ 2016-12-01 22:41 BigOcean 阅读( ...) 评论( ...) 编辑 收藏
点击表头即可实现排序的代码./*table排序步骤 1、给排序的表格id 2、标题栏<thead> 3、排序内容<tbody> 5、引入此js 6、在文档的末尾入 [removed] var to = new TableOrder("idTable"), odID = to.creat({ type: "int", desc: false }), arrOrder = []; $$A.forEach([ ["idNum", { type: "int" }],//排序对象(对应列的id) ["idTitle", { index: 1 }], ["idExt", { index: 1, property: "_ext" }], ["idAddtime", { index: 2, type: "date" }], ["idSize", { index: 3, property: "_order", type: "int" }], ["idCheckbox", { index: 4, type: "bool", value: SetCheck }], ["idRadio", { index: 5, type: "bool", value: SetCheck }] ], function (arr){ var o = $$(arr[0]), order = to.creat(arr[1]); order.onBegin = function(){ ClearCss(); odID.desc = this.desc; } order.onEnd = function(){ o.className = this.desc ? "desc" : "asc";//设置样式 this.desc = !this.desc;//取反排序 } o.onclick = function(){ to.sort(order, odID); } arrOrder.push(o);//记录排序项目(这里主要用来设置样式) }); [removed] 7、【排序对象】 属性 默认值//说明 index: 0,//td索引 property: "innerHTML",//获取数据的属性 type: "string",//比较的数据类型 desc: true,//是否按降序 compare: null,//自定义排序函数 value: null,//自定义取值函数 repair: this._repair,//是否解决checkbox和radio状态恢复bug onBegin: function(){},//排序前执行 onEnd: function(){}//排序后执行 */ //完整的示例 //<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> //<html> //<head> //<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> //<title>Table 排序</title> //[removed][removed] //</head> //<body> //<style type="text/css"> //.odTable {width:500px;border:1px solid #ebebeb;line-height:20px;font-size:12px;background:#FFF;} //.odTable thead {background-color:#ebebeb;} //.odTable span {color:#333;padding-right:15px;cursor:pointer;} //.odTable .desc, .odTable .asc {background:url(http://images.cnblogs.com/cnblogs_com/cloudgamer/169629/r_2.jpg) right center no-repeat;} //.odTable .desc {background-image:url(http://images.cnblogs.com/cnblogs_com/cloudgamer/169629/r_1.jpg);} //</style> //<table border="0" cellspacing="0" cellpadding="5" class="odTable" id="idTable"> // <thead> // <tr> // <td align="center"><span id="idNum">ID</span></td> // <td> <span id="idTitle">名称</span> / <span id="idExt">类型</span></td> // <td width="100" align="center"><span id="idAddtime">上传时间</span></td> // <td width="50" align="center"><span id="idSize">大小</span></td> // <td width="30" align="center"><span id="idCheckbox">C</span></td> // <td width="30" align="center"><span id="idRadio">R</span></td> // </tr> // </thead> // <tbody> // <tr> // <td align="center">1</td> // <td _ext="htm">new.htm</td> // <td align="center">2008/9/12</td> // <td align="right" _order="433244">423.09 K</td> // <td align="center"><input type="checkbox"/></td> // <td align="center"><input name="c" type="radio"/></td> // </tr> // <tr> // <td align="center">2</td> // <td _ext="js">Scroller.js</td> // <td align="center">2008/9/23</td> // <td align="right" _order="2560">2.5 K</td> // <td align="center"><input type="checkbox"/></td> // <td align="center"><input name="c" type="radio"/></td> // </tr> // <tr> // <td align="center">3</td> // <td _ext="js">AlertBox.js</td> // <td align="center">2008/9/23</td> // <td align="right" _order="3563">3.48 K</td> // <td align="center"><input type="checkbox"/></td> // <td align="center"><input name="c" type="radio"/></td> // </tr> // <tr> // <td align="center">4</td> // <td _ext="xml">1.xml</td> // <td align="center">2008/10/4</td> // <td align="right" _order="11397">11.13 K</td> // <td align="center"><input type="checkbox"/></td> // <td align="center"><input name="c" type="radio"/></td> // </tr> // <tr> // <td align="center">5</td> // <td _ext="xml">4.xml</td> // <td align="center">2008/10/4</td> // <td align="right" _order="108">108 b</td> // <td align="center"><input type="checkbox"/></td> // <td align="center"><input name="c" type="radio"/></td> // </tr> // <tr> // <td align="center">6</td> // <td _ext="htm">news.htm</td> // <td align="center">2008/10/4</td> // <td align="right" _order="14074">13.74 K</td> // <td align="center"><input type="checkbox"/></td> // <td align="center"><input name="c" type="radio"/></td> // </tr> // <tr> // <td align="center">7</td> // <td _ext="js">function.js</td> // <td align="center">2008/10/4</td> // <td align="right" _order="2844">2.78 K</td> // <td align="center"><input type="checkbox"/></td> // <td align="center"><input name="c" type="radio"/></td> // </tr> // <tr> // <td align="center">8</td> // <td _ext="mp3">神秘园 - Nocturne.mp3</td> // <td align="center">2008/9/20</td> // <td align="right" _order="3111293">2.97 M</td> // <td align="center"><input type="checkbox"/></td> // <td align="center"><input name="c" type="radio"/></td> // </tr> // <tr> // <td align="center">9</td> // <td _ext="doc">详细功略+剧情流程(一).doc</td> // <td align="center">2009/2/2</td> // <td align="right" _order="63488">62 K</td> // <td align="center"><input type="checkbox"/></td> // <td align="center"><input name="c" type="radio"/></td> // </tr> // <tr> // <td align="center">10</td> // <td _ext="doc">详细功略+剧情流程(二).doc</td> // <td align="center">2009/2/2</td> // <td align="right" _order="164352">160.5 K</td> // <td align="center"><input type="checkbox"/></td> // <td align="center"><input name="c" type="radio"/></td> // </tr> // </tbody> //</table> //<br /> //有中文的先排前面,再按时间倒序,ID倒序排序: //<input name="" type="button" value="Sort" id="idBtn" /> //[removed] //var to = new TableOrder("idTable"), odID = to.creat({ type: "int", desc: false }), arrOrder = []; //$$A.forEach([ // ["idNum", { type: "int" }], // ["idTitle", { index: 1 }], // ["idExt", { index: 1, property: "_ext" }], // ["idAddtime", { index: 2, type: "date" }], // ["idSize", { index: 3, property: "_order", type: "int" }], // ["idCheckbox", { index: 4, type: "bool", value: SetCheck }], // ["idRadio", { index: 5, type: "bool", value: SetCheck }] //], function (arr){ // var o = $$(arr[0]), order = to.creat(arr[1]); // order.onBegin = function(){ ClearCss(); odID.desc = this.desc; } // order.onEnd = function(){ // o.className = this.desc ? "desc" : "asc";//设置样式 // this.desc = !this.desc;//取反排序 // } // o.onclick = function(){ to.sort(order, odID); } // arrOrder.push(o);//记录排序项目(这里主要用来设置样式) //}); //$$("idNum").onclick(); //////////////////////////////////////////////////////////////////////// //var od1 = to.creat({ index: 1, onEnd: ClearCss, // compare: function(value1, value2) { // var re = /[\u4E00-\u9FA5]/, v1 = re.test(value1), v2 = re.test(value2); // return v1 == v2 ? 0 : (v1 ? 1 : -1); // } // }) // ,od2 = to.creat({ index: 2, type: "date" }) ,od3 = to.creat({ type: "int" }); //$$("idBtn").onclick = function(){ to.sort(od1, od2, od3); } //[removed] //</body> //</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值