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自定义数组排序方法
Feb 12 Javascript
纯JavaScript实现的分页插件实例
Jul 14 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
Jan 28 Javascript
javascript动态获取登录时间和在线时长
Feb 25 Javascript
js html css实现复选框全选与反选
Oct 09 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
Dec 17 Javascript
vue.js单页面应用实例的简单实现
Apr 10 Javascript
实现一个完整的Node.js RESTful API的示例
Sep 29 Javascript
React 使用recharts实现散点地图的示例代码
Dec 07 Javascript
ElementUI radio组件选中小改造
Aug 12 Javascript
JavaScript canvas仿代码流瀑布
Feb 10 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
Jun 05 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函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
2013/06/25 PHP
smarty获得当前url的方法分享
2014/02/14 PHP
Destoon实现多表查询示例
2014/08/21 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
EasyUi中的Combogrid 实现分页和动态搜索远程数据
2016/04/01 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
Koa 中的错误处理解析
2019/04/09 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
浅谈Vue.use到底是什么鬼
2020/01/21 Javascript
利用 Chrome Dev Tools 进行页面性能分析的步骤说明(前端性能优化)
2021/02/24 Javascript
python中列表元素连接方法join用法实例
2015/04/07 Python
python读取word文档的方法
2015/05/09 Python
Python实现简单的代理服务器
2015/07/25 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
python seaborn heatmap可视化相关性矩阵实例
2020/06/03 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
旧时光糖果:Old Time Candy
2018/02/05 全球购物
绿色城市实施方案
2014/03/19 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
党委工作总结2015
2015/04/27 职场文书
门卫管理制度范本
2015/08/05 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书