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 相关文章推荐
用js实现键盘方向键翻页功能的代码
Jun 03 Javascript
才发现的超链接js导致网页中GIF动画停止的解决方法
Nov 02 Javascript
Jquery截取中文字符串的实现代码
Dec 22 Javascript
jquery为页面增加快捷键示例
Jan 31 Javascript
JS判断移动端访问设备并加载对应CSS样式
Jun 13 Javascript
AngularJS入门示例之Hello World详解
Jan 04 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
May 12 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
Apr 24 Javascript
vue新建项目并配置标准路由过程解析
Dec 09 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
Dec 22 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
Aug 31 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
星际争霸 Starcraft 发展史
2020/03/14 星际争霸
paypal即时到账php实现代码
2010/11/28 PHP
php学习笔记之 函数声明
2011/06/09 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
php 生成短网址原理及代码
2014/01/23 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
JS实现运动缓冲效果的封装函数示例
2018/02/18 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
jQuery each和js forEach用法比较
2019/02/27 jQuery
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
python如何实现反向迭代
2018/03/20 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
深入理解Python 多线程
2020/06/16 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
网络技术支持面试题
2013/04/22 面试题
优秀电子工程系毕业生求职信
2014/05/24 职场文书
大学生见习总结报告
2015/06/24 职场文书
校园歌手大赛主持词
2015/07/03 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技