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.validate使用攻略 第五步 正则验证
Jul 01 Javascript
js Math 对象的方法
Sep 01 Javascript
js控制当再次点击按钮时的间隔时间
Jun 03 Javascript
鼠标移到图片上变大显示而不是放大镜效果
Jun 15 Javascript
在JavaScript中处理字符串之link()方法的使用
Jun 08 Javascript
利用浮层使select不可选的实现方法
Dec 03 Javascript
Bootstrap导航简单实现代码
Mar 06 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
D3.js进阶系列之CSV表格文件的读取详解
Jun 06 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
Jul 23 Javascript
JS异步错误捕获的一些事小结
Apr 26 Javascript
vue实例的选项总结
Jun 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以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
解析php防止form重复提交的方法
2013/07/01 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
2017/05/05 PHP
thinkPHP5框架实现多数据库连接,跨数据连接查询操作示例
2019/05/29 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
JavaScript中的prototype使用说明
2010/04/13 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
js获取页面传来参数的方法
2014/09/06 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
PYTHON压平嵌套列表的简单实现
2016/06/08 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
Python初学者常见错误详解
2019/07/02 Python
python3图片文件批量重命名处理
2019/10/31 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
详解如何使用CSS3中的结构伪类选择器和伪元素选择器
2020/01/06 HTML / CSS
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
html2canvas生成清晰的图片实现打印的示例代码
2019/09/30 HTML / CSS
英国一家专门出售品牌鞋子的网站:Allsole
2016/08/07 全球购物
管理学专业个人求职信范文
2013/12/13 职场文书
成品仓管员工作职责
2013/12/29 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
老公婚前保证书
2015/02/28 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书