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 相关文章推荐
Javascript调试工具(下载)
Jan 09 Javascript
JSON 和 JavaScript eval使用说明
Jun 13 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
Feb 06 Javascript
关于angularJs指令的Scope(作用域)介绍
Oct 25 Javascript
浅谈Javascript事件对象
Feb 05 Javascript
详解Vue方法与事件
Mar 09 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
Sep 16 Javascript
详解webpack-dev-server使用方法
Sep 14 Javascript
vue-for循环嵌套操作示例
Jan 28 Javascript
setTimeout与setInterval的区别浅析
Mar 23 Javascript
2019最新21个MySQL高频面试题介绍
Feb 06 Javascript
Vue elementui字体图标显示问题解决方案
Aug 18 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
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
2016/10/25 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
utf8的编码算法 转载
2006/12/27 Javascript
使用javascript:将其它类型值转换成布尔类型值的解决方法详解
2013/05/07 Javascript
js局部刷新页面时间具体实现
2013/07/04 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
js剪切板应用clipboardData实例解析
2016/05/29 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
在create-react-app中使用sass的方法示例
2018/10/01 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
基于TensorFlow的CNN实现Mnist手写数字识别
2020/06/17 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
中专生自我鉴定
2013/12/17 职场文书
服装创业计划书范文
2014/02/05 职场文书
致接力运动员广播稿
2014/02/17 职场文书
刑事上诉状范文
2015/05/22 职场文书
爱护环境建议书
2015/09/14 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
Django实现聊天机器人
2021/05/31 Python