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 相关文章推荐
XMLHttpRequest处理xml格式的返回数据(示例代码)
Nov 21 Javascript
$.each与$().each的区别示例介绍
Mar 20 Javascript
js获取下拉列表的值和元素个数示例
May 07 Javascript
javascript制作的滑动图片菜单
May 15 Javascript
javascript实现的简单计时器
Jul 19 Javascript
详解JavaScript基于面向对象之继承实例
Dec 16 Javascript
springmvc接收jquery提交的数组数据代码分享
Oct 28 jQuery
JavaScript面试出现频繁的一些易错点整理
Mar 29 Javascript
vue-router懒加载速度缓慢问题及解决方法
Nov 25 Javascript
Next.js项目实战踩坑指南(笔记)
Nov 29 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
Jul 23 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
Aug 02 jQuery
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
html中select语句读取mysql表中内容
2006/10/09 PHP
说明的比较细的php 正则学习实例
2008/07/30 PHP
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
2019/08/03 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
Python子类继承父类构造函数详解
2019/02/19 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
迟到检讨书800字
2014/01/13 职场文书
修理厂厂长岗位职责
2014/01/30 职场文书
酒店营销策划方案
2014/02/07 职场文书
批评与自我批评发言稿
2014/10/15 职场文书
2014年统计工作总结
2014/11/21 职场文书
天气温馨提示语
2015/07/14 职场文书
2019年教师入党申请书
2019/06/27 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
分享一些Java的常用工具
2021/06/11 Java/Android
Pytest中skip skipif跳过用例详解
2021/06/30 Python
css实现左上角飘带效果的完整代码
2022/03/18 HTML / CSS