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 22 Javascript
JQuery 弹出框定位实现方法
Dec 02 Javascript
用JQuery 判断某个属性是否存在hasAttr的解决方法
Apr 26 Javascript
jquery判断元素的子元素是否存在的示例代码
Feb 04 Javascript
详解AngularJS中的作用域
Jun 17 Javascript
JQuery插件Marquee.js实现无缝滚动效果
Apr 26 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
Oct 09 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
Jan 18 Javascript
jQuery实现贪吃蛇小游戏(附源码下载)
Mar 04 Javascript
vue2.0多条件搜索组件使用详解
Mar 26 Javascript
JS无限级导航菜单实现方法
Jan 05 Javascript
AngularJS动态生成select下拉框的方法实例
Nov 17 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
SONY ICF-F10中波修复记
2021/03/02 无线电
php下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
PHP中使用socket方式GET、POST数据实例
2015/04/02 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
node.js中的fs.realpathSync方法使用说明
2014/12/16 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
原生JS实现美图瀑布流布局赏析
2015/09/07 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
Vue实现web分页组件详解
2017/11/28 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
django实现分页的方法
2015/05/26 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
朴素贝叶斯Python实例及解析
2018/11/19 Python
Python跑循环时内存泄露的解决方法
2020/01/13 Python
django实现模板中的字符串文字和自动转义
2020/03/31 Python
python logging 重复写日志问题解决办法详解
2020/08/04 Python
解决pycharm 格式报错tabs和space不一致问题
2021/02/26 Python
美国顶尖折扣时尚购物网:Bluefly
2016/08/28 全球购物
什么是表空间(tablespace)和系统表空间(System tablespace)
2013/02/25 面试题
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
农药学硕士毕业生自荐信
2013/09/25 职场文书
专业技术职务聘任书
2014/03/29 职场文书
租房协议书范文
2014/08/20 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
学生会干部任命书
2015/09/21 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS