js表格排序实例分析(支持int,float,date,string四种数据类型)


Posted in Javascript onMay 06, 2015

本文实例讲述了js表格排序的方法。分享给大家供大家参考。具体如下:

<html>
<head>
<title>SortTable2</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript">
var k=0;
/**//**************************************************************************
排序的主方法,有三个形参,STableTd,iCol,sDataType分别为需要排序的表格ID,
需要排序的表格列号,所在列的数据类型(支持int,float,date,string四种数据类型)
**************************************************************************/
function sortTable(sTableId,iCol,sDataType)
{
  var oTable=document.getElementById(sTableId);//获取表格的ID 
  var oTbody=oTable.tBodies[0]; //获取表格的tbody
  var colDataRows=oTbody.rows; //获取tbody里的所有行的引用

  var aTRs=new Array(); //定义aTRs数组用于存放tbody里的行
  for(var i=0;i<colDataRows.length;i++) //依次把所有行放如aTRs数组
  {
    aTRs.push(colDataRows[i]);
  }
  /**//***********************************************************************
  sortCol属性是额外给table添加的属性,用于作顺反两种顺序排序时的判断,区分
  首次排序和后面的有序反转
  ************************************************************************/
  if(oTable.sortCol==iCol) //非首次排序
  {
    aTRs.reverse();
  }
  else  //首次排序
  {
    if(k%2==0) //升序
    {
      aTRs.sort(generateCompareTRs(iCol,sDataType));
    }
    else if(k%2==1) //降序
    {
      aTRs.sort(generateCompareTRs1(iCol,sDataType));
    }
  }
  var oFragment=document.createDocumentFragment();  //创建文档碎片
  for(var i=0;i<aTRs.length;i++)  //把排序过的aTRs数组成员依次添加到文档碎片
  {
    oFragment.appendChild(aTRs[i]);
  }
  oTbody.appendChild(oFragment); //把文档碎片添加到tbody,完成排序后的显示更新 
  oTable.sortCol=iCol;  //把当前列号赋值给sortCol,以此来区分首次排序和非首次排序,//sortCol的默认值为-1
};

//比较函数,用于两项之间的排序
//升序
function generateCompareTRs(iCol,sDataType)
{
  return  function compareTRs(oTR1,oTR2)
  {
    var vValue1=convert(oTR1.cells[iCol].firstChild.nodeValue,sDataType);
    var vValue2=convert(oTR2.cells[iCol].firstChild.nodeValue,sDataType);
    if(vValue1<vValue2)
    {
      return -1;
    }
    else if(vValue1>vValue2)
    {
      return 1;
    }
    else
    {
      return 0;
    }
  };
};
//降序
function generateCompareTRs1(iCol,sDataType)
{
  return  function compareTRs(oTR1,oTR2)
  {
    var vValue1=convert(oTR1.cells[iCol].firstChild.nodeValue,sDataType);
    var vValue2=convert(oTR2.cells[iCol].firstChild.nodeValue,sDataType);
    if(vValue1>vValue2)
    {
      return -1;
    }
    else if(vValue1<vValue2)
    {
      return 1;
    }
    else
    {
      return 0;
    }
  };
};
//数据类型转换函数
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();
  }
};
</script>
</head>
<body>
<form name="f1" id="f1" action="" method="post">
<table border="1" id="tblSort" sortCol="-1">
<thead>
 <tr>
  <th onClick="sortTable('tblSort',0);" style="cursor:pointer">Last Name</th>
  <th onClick="sortTable('tblSort',1)" style="cursor:pointer">First Name</th>
  <th onClick="sortTable('tblSort',2,'date')" style="cursor:pointer">Birthday</th>
  <th onClick="sortTable('tblSort',3,'int')" style="cursor:pointer">Silbings</th>
 </tr>
</thead>
<tbody>
 <tr>
  <td>Simth</td>
  <td>John</td>
  <td>7/12/1978</td>
  <td>50nGy/h</td>
 </tr>
 <tr>
  <td>Johnson</td>
  <td>Betty</td>
  <td>5/12/1965</td>
  <td>20nGy/h</td>
 </tr>
 <tr>
  <td>Henderson</td>
  <td>Nathan</td>
  <td>10/15/1977</td>
  <td>130nGy/h</td>
 </tr>
 <tr>
  <td>Willianms</td>
  <td>James</td>
  <td>2/25/1949</td>
  <td>10nGy/h</td>
 </tr>
 <tr>
  <td>Gilliam</td>
  <td>Michael</td>
  <td>7/8/1980</td>
  <td>140nGy/h</td>
 </tr>
 <tr>
  <td>Walker</td>
  <td>Matthew</td>
  <td>6/18/1981</td>
  <td>103nGy/h</td>
 </tr>
</tbody>   
</table>
</form>
</body>
</html>

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
拖动Html元素集合 Drag and Drop any item
Dec 22 Javascript
jQuery getJSON 处理json数据的代码
Jul 26 Javascript
jQuery LigerUI 插件介绍及使用之ligerDrag和ligerResizable示例代码打包
Apr 06 Javascript
JS连接SQL数据库与ACCESS数据库的方法实例
Nov 21 Javascript
当某个文本框成为焦点时即清除文本框内容
Apr 28 Javascript
Eclipse引入jquery报错如何解决
Dec 01 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
Dec 31 Javascript
微信小程序页面开发注意事项整理
May 18 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
详解ESLint在Vue中的使用小结
Oct 15 Javascript
vue动态绑定class选中当前列表变色的方法示例
Dec 19 Javascript
浅谈bootstrap layer.open中end的使用方法
Sep 12 Javascript
js实现漂浮回顶部按钮实例
May 06 #Javascript
js实现仿百度汽车频道选择汽车图片展示实例
May 06 #Javascript
js中日期的加减法
May 06 #Javascript
javascript实现回到顶部特效
May 06 #Javascript
javascript实现完美拖拽效果
May 06 #Javascript
avalonjs实现仿微博的图片拖动特效
May 06 #Javascript
avalonjs制作响应式瀑布流特效
May 06 #Javascript
You might like
php返回json数据函数实例
2014/10/09 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
JavaScript高级程序设计(第3版)学习笔记9 js函数(下)
2012/10/11 Javascript
获取3个数组不重复的值的具体实现
2013/12/30 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
JavaScript 对象深入学习总结(经典)
2015/09/29 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python实现基本进制转换的方法
2015/07/11 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
python实现感知机线性分类模型示例代码
2019/06/02 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
详解pandas赋值失败问题解决
2020/11/29 Python
matplotlib运行时配置(Runtime Configuration,rc)参数rcParams解析
2021/01/05 Python
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
自荐信如何“自荐”
2013/10/24 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
食品安全责任书
2014/04/15 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
业务内勤岗位职责
2014/04/30 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
班主任寄语2016
2015/12/04 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis