html表格字段排序,js实现表格字段排序

1.比较函数生成器:

/**

* 比较函数生成器

*

* @param iCol

*            数据行数

* @param sDataType

*            该行的数据类型

* @return

*/

function  generateCompareTRs(iCol, sDataType) {

return   function  compareTRs(oTR1, oTR2) {

vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType);

vValue2 = convert(oTR2.cells[iCol].firstChild.nodeValue, sDataType);

if  (vValue1 < vValue2) {

return  -1;

}  else   if  (vValue1 > vValue2) {

return  1;

}  else  {

return  0;

}

};

}

2.处理比较字符类型:

/**

* 处理排序的字段类型

*

* @param sValue

*            字段值 默认为字符类型即比较ASCII码

* @param sDataType

*            字段类型 对于date只支持格式为mm/dd/yyyy或mmmm dd,yyyy(January 12,2004)

* @return

*/

function  convert(sValue, sDataType) {

switch  (sDataType) {

case   "int" :

return  parseInt(sValue);

case   "float" :

return  parseFloat(sValue);

case   "date" :

return   new  Date(Date.parse(sValue));

default :

return  sValue.toString();

}

}

3.主函数:

/**

* 通过表头对表列进行排序

*

* @param sTableID

*            要处理的表ID

* @param iCol

*            字段列id eg: 0 1 2 3 ...

* @param sDataType

*            该字段数据类型 int,float,date 缺省情况下当字符串处理

*/

function  sortTable(sTableID, iCol, sDataType) {

var  oTable = document.getElementById(sTableID);

var  oTBody = oTable.tBodies[0];

var  colDataRows = oTBody.rows;

var  aTRs =  new  Array;

for  (  var  i = 0; i < colDataRows.length; i++) {

aTRs[i] = colDataRows[i];

}

if  (oTable.sortCol == iCol) {

aTRs.reverse();

}  else  {

aTRs.sort(generateCompareTRs(iCol, sDataType));

}

var  oFragment = document.createDocumentFragment();

for  (  var  j = 0; j < aTRs.length; j++) {

oFragment.appendChild(aTRs[j]);

}

oTBody.appendChild(oFragment);

oTable.sortCol = iCol;

}

将以上问代码封装到一个js文件中,在html页面中引用。

测试test.html:

< html   xmlns = "http://www.w3.org/1999/xhtml" >

< title > 表列排序 title >

< script   type = "text/javascript"   src = "js/sortTable.js" > script >

< body >

< table   border = "1"   id = "tblSort" >

< thead   style = "color: red; bgcolor: blank" >

< tr >

< th   onclick = " sortTable('tblSort',0);"   style = "cursor: pointer" > LastName th >

< th   onclick = " sortTable('tblSort',1,'int');"   style = "cursor: pointer" > Number th >

< th   onclick = " sortTable('tblSort',2,'date');"   style = "cursor: pointer" > Date th >

tr >

thead >

< tbody >

< tr >

< td > A td >

< td > 1 td >

< td > 5/9/2008 td >

tr >

< tr >

< td > B td >

< td > 3 td >

< td > 6/9/2008 td >

tr >

< tr >

< td > D td >

< td > 6 td >

< td > 5/4/2008 td >

tr >

< tr >

< td > E td >

< td > -5 td >

< td > 5/4/2007 td >

tr >

< tr >

< td > H td >

< td > 34 td >

< td > 5/8/2008 td >

tr >

< tr >

< td > C td >

< td > 12 td >

< td > 1/4/2018 td >

tr >

tbody >

table >

body >

html >

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值