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 相关文章推荐
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
Feb 22 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
Oct 17 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
Sep 24 Javascript
js采用concat和sort将N个数组拼接起来的方法
Jan 21 Javascript
Javascript OOP之面向对象
Jul 31 Javascript
jquery过滤特殊字符',防sql注入的实现方法
Aug 17 Javascript
简单实现vue验证码60秒倒计时功能
Oct 11 Javascript
详解Ant Design of React的安装和使用方法
Dec 27 Javascript
图文详解vue框架安装步骤
Feb 12 Javascript
vue 项目 iOS WKWebView 加载
Apr 17 Javascript
vue h5移动端禁止缩放代码
Oct 28 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 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
2016/01/08 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
Laravel 队列使用的实现
2019/01/08 PHP
Javascript中常见的校验如域名、手机、邮箱等等
2014/01/02 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
AngularJS 过滤与排序详解及实例代码
2016/09/14 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
python学习数据结构实例代码
2015/05/11 Python
Python计算一个文件里字数的方法
2015/06/15 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
python实现移位加密和解密
2019/03/22 Python
Python实现像awk一样分割字符串
2020/09/15 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
后勤主管岗位职责
2014/03/01 职场文书
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
优秀教研组申报材料
2014/12/26 职场文书
慈善募捐倡议书
2015/04/27 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书