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 相关文章推荐
javascript中字符串拼接需注意的问题
Jul 13 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
Apr 12 Javascript
javascript引用赋值(地址传值)用法实例
Jan 13 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
Sep 15 Javascript
基于jQuery实现选项卡效果
Jan 04 Javascript
Angular2 自定义validators的实现方法
Jul 05 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
Dec 20 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 Javascript
vue组件实践之可搜索下拉框功能
Nov 25 Javascript
微信小程序上线发布流程图文详解
May 06 Javascript
Vue.js 无限滚动列表性能优化方案
Dec 02 Javascript
Antd的table组件表格的序号自增操作
Oct 27 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
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
php 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
在yii中新增一个用户验证的方法详解
2013/06/20 PHP
基于thinkphp6.0的success、error实现方法
2019/11/05 PHP
javascript Object与Function使用
2010/01/11 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
基于BootStrap的图片轮播效果展示实例代码
2016/05/23 Javascript
详解利用exif.js解决ios手机上传竖拍照片旋转90度问题
2016/11/04 Javascript
jQuery焦点图轮播效果实现方法
2016/12/19 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
2019/09/12 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
浅谈python之新式类
2018/08/12 Python
Selenium结合BeautifulSoup4编写简单的python爬虫
2020/11/06 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
新媒传信软件测试面试题
2013/02/24 面试题
总经理办公室主任岗位职责
2013/11/12 职场文书
开学季活动策划方案
2014/02/28 职场文书
保卫钓鱼岛口号
2014/06/20 职场文书
找工作求职信
2014/07/07 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
2014年财务部工作总结
2014/11/11 职场文书
单身证明范本
2015/06/15 职场文书
客户答谢会致辞
2015/07/30 职场文书
品德与社会教学反思
2016/02/24 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL