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 相关文章推荐
jQuery 拖动层(在可视区域范围内)
May 24 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
Jan 23 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
Jan 27 Javascript
微信小程序中实现一对多发消息详解及实例代码
Feb 14 Javascript
实例解析js中try、catch、finally的执行规则
Feb 24 Javascript
Mongoose经常返回e11000 error的原因分析
Mar 29 Javascript
vue登录路由验证的实现
Dec 13 Javascript
Vue 幸运大转盘实现思路详解
May 06 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
Jul 22 Javascript
微信小程序3种位置API的使用方法详解
Aug 05 Javascript
seajs和requirejs模块化简单案例分析
Aug 26 Javascript
JS异步宏队列微队列原理详解
Sep 09 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提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
2012/05/06 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
jquery背景跟随鼠标滑动导航
2015/11/20 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
javascript实现简单搜索功能
2020/03/26 Javascript
Python中多线程thread与threading的实现方法
2014/08/18 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
python实现停车管理系统
2018/11/30 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
python定时截屏实现
2020/11/02 Python
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
俄罗斯游戏商店:Buka
2020/03/01 全球购物
初中生个人学习的自我评价
2013/12/04 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
一年级学生评语大全
2014/04/21 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
乡镇保密工作责任书
2014/07/28 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
妈妈别哭观后感
2015/06/08 职场文书
教师外出学习心得体会
2016/01/18 职场文书
2016年社区“6.26”禁毒日宣传活动总结
2016/04/05 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
使用scrapy实现增量式爬取方式
2022/06/21 Python