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字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
Oct 17 Javascript
JS鼠标拖拽实例分析
Nov 23 Javascript
JavaScript与ActionScript3两者的同性与差异性
Sep 22 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
Nov 23 Javascript
js正则表达式验证密码强度【推荐】
Mar 03 Javascript
JavaScript实现滑动导航栏效果
Aug 30 Javascript
webpack引入eslint配置详解
Jan 22 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
Jul 10 Javascript
vue 插件的方法代码详解
Jun 06 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
Jun 11 Javascript
Element InputNumber 计数器的实现示例
Aug 03 Javascript
JavaScript展开运算符和剩余运算符的区别详解
Feb 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
5种PHP创建数组的实例代码分享
2014/01/17 PHP
php使用变量动态创建类的对象用法示例
2017/02/06 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
jquery中ajax学习笔记4
2011/10/16 Javascript
JQuery页面图片切换和新闻列表滚动效果的具体实现
2013/09/26 Javascript
js和jquery使按钮失效为不可用状态的方法
2014/01/26 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
Angular2库初探
2017/03/01 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
[00:32]2016完美“圣”典风云人物:Maybe宣传片
2016/12/05 DOTA
Django对数据库进行添加与更新的例子
2019/07/12 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
TensorFlow的reshape操作 tf.reshape的实现
2020/04/19 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
诉讼代理人授权委托书
2014/10/11 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
表扬通报怎么写
2015/01/16 职场文书
教师师德承诺书2016
2016/03/25 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js