js实现表格字段排序


Posted in Javascript onFebruary 19, 2014

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<table 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 >
Javascript 相关文章推荐
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
Nov 30 Javascript
基于jquery的回到页面顶部按钮
Jun 27 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
Jun 20 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
Apr 26 Javascript
Jquery代码实现图片轮播效果(一)
Aug 12 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
Sep 14 Javascript
jquery插件bootstrapValidator表单验证详解
Dec 15 Javascript
JavaScript设计模式之调停者模式实例详解
Feb 03 Javascript
Vue实现自定义下拉菜单功能
Jul 16 Javascript
JavaScript惰性求值的一种实现方法示例
Jan 11 Javascript
从组件封装看Vue的作用域插槽的实现
Feb 12 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
Apr 29 Javascript
js获取判断上传文件后缀名的示例代码
Feb 19 #Javascript
jQuery 文本框得失焦点的简单实例
Feb 19 #Javascript
JS实现仿百度输入框自动匹配功能的示例代码
Feb 19 #Javascript
js 数值转换为3位逗号分隔的示例代码
Feb 19 #Javascript
JS将数字转换成三位逗号分隔的样式(示例代码)
Feb 19 #Javascript
JS执行删除前的判断代码
Feb 18 #Javascript
JS弹出层单纯的绝对定位居中示例代码
Feb 18 #Javascript
You might like
php递归方法实现无限分类实例代码
2014/02/28 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
在Laravel中使用DataTables插件的方法
2018/05/29 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
关于document.cookie的使用javascript
2008/04/11 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
2012/05/11 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
傻瓜式解读koa中间件处理模块koa-compose的使用
2018/10/30 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
vue实现多条件和模糊搜索功能
2019/05/28 Javascript
node后端服务保活的实现
2019/11/10 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
跟老齐学Python之用Python计算
2014/09/12 Python
Python 读写文件的操作代码
2018/09/20 Python
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
中学生自我评价范文
2014/02/08 职场文书
自荐信的格式
2014/03/10 职场文书
2014年母亲节寄语
2014/05/07 职场文书
技术比武方案
2014/05/19 职场文书
商务经理岗位职责
2014/08/03 职场文书
老龄工作先进事迹
2014/08/15 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
职工年度考核评语
2014/12/31 职场文书
2015年化验室工作总结
2015/04/23 职场文书
新生儿未入户证明
2015/06/23 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
2022/06/21 Java/Android