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 相关文章推荐
基于Jquery的文字自动截取(提供源代码)
Aug 09 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
Jan 29 Javascript
js 距离某一时间点时间是多少实现代码
Oct 14 Javascript
JS判断对象是否存在的10种方法总结
Dec 23 Javascript
javascript将url中的参数加密解密代码
Nov 17 Javascript
JS中多种方式创建对象详解
Mar 22 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
Apr 27 Javascript
js学习总结_选项卡封装(实例讲解)
Jul 13 Javascript
微信小程序自定义组件
Aug 16 Javascript
vue-cli3.0使用及部分配置详解
Aug 29 Javascript
开发中常用的25个JavaScript单行代码(小结)
Jun 28 Javascript
详解JavaScript匿名函数和闭包
Jul 10 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
smarty实例教程
2006/11/19 PHP
php中flush()、ob_flush()、ob_end_flush()的区别介绍
2013/02/17 PHP
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
js动态设置鼠标事件示例代码
2013/10/30 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
js实现页面跳转重定向的几种方式
2014/05/29 Javascript
jQuery实现设置、移除文本框默认值功能
2015/01/13 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
jQuery DataTables插件自定义Ajax分页实例解析
2020/04/28 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
Vue使用vux-ui自定义表单验证遇到的问题及解决方法
2018/05/10 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
python实现简单图书管理系统
2019/11/22 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
python如何保存文本文件
2020/06/07 Python
python如何求圆的面积
2020/07/01 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
白酒市场开发计划书
2014/01/09 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
物业保安员岗位职责
2014/03/14 职场文书
奥利奥广告词
2014/03/20 职场文书
自主招生学校推荐信
2014/09/26 职场文书
刑事上诉状(量刑过重)
2015/05/23 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
承诺书怎么写 ?
2019/04/16 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
解决Python字典查找报Keyerror的问题
2021/05/26 Python