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获得IE版本不准确webbrowser的解决方法
Feb 23 Javascript
如何调试异步加载页面里包含的js文件
Oct 30 Javascript
jQuery Ajax中的事件详细介绍
Apr 16 Javascript
设置jQueryUI DatePicker默认语言为中文
Jun 04 Javascript
微信小程序 参数传递详解
Oct 24 Javascript
浅谈javascript中执行环境(作用域)与作用域链
Dec 08 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
May 08 jQuery
javascript用rem来做响应式开发
Jan 13 Javascript
详解angular2如何手动点击特定元素上的点击事件
Oct 16 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 Javascript
解决element-ui的下拉框有值却无法选中的情况
Nov 07 Javascript
使用JS实现简易计算器
Jun 14 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 checkbox 取值详细说明
2010/08/19 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
extjs form textfield的隐藏方法
2008/12/29 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
首页图片漂浮效果示例代码
2014/06/05 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
vue组件name的作用小结
2018/05/23 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
layui使用label标签的方法
2019/09/14 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
[03:08]Ti4观战指南上
2014/07/07 DOTA
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
Python的Django框架使用入门指引
2015/04/15 Python
不要用强制方法杀掉python线程
2017/02/26 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
详解python异步编程之asyncio(百万并发)
2018/07/07 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
python视频按帧截取图片工具
2019/07/23 Python
python opencv根据颜色进行目标检测的方法示例
2020/01/15 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
中学门卫岗位职责
2013/12/26 职场文书
学校宣传标语
2014/06/18 职场文书
营销学习心得体会
2014/09/12 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript