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获取和设置CheckBox状态的简单方法
Jul 05 Javascript
JavaScript实现复制功能各浏览器支持情况实测
Jul 18 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
Jul 21 Javascript
javascript判断复选框是否选中的方法
Oct 16 Javascript
JS动态插入并立即执行回调函数的方法
Apr 21 Javascript
JavaScipt选取文档元素的方法(推荐)
Aug 05 Javascript
Angular实现可删除并计算总金额的购物车功能示例
Dec 26 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
Oct 23 Javascript
Node.js中console.log()输出彩色字体的方法示例
Dec 01 Javascript
vue element-ui实现input输入框金额数字添加千分位
Dec 29 Javascript
JavaScript实现移动端弹窗后禁止滚动
May 25 Javascript
jQuery实现日历效果
Sep 11 jQuery
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下载远程文件的3种方法
2015/12/29 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
用javascript获取textarea中的光标位置
2008/05/06 Javascript
js/jquery获取浏览器窗口可视区域高度和宽度以及滚动条高度实现代码
2012/12/17 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
2016/05/11 Javascript
相册展示PhotoSwipe.js插件实现
2016/08/25 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
bootstrap滚动监控器使用方法解析
2017/01/13 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
Python实现的个人所得税计算器示例
2018/06/01 Python
Python返回数组/List长度的实例
2018/06/23 Python
python根据url地址下载小文件的实例
2018/12/18 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
Python当中的array数组对象实例详解
2019/06/12 Python
Flask框架路由和视图用法实例分析
2019/11/07 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
元旦晚会邀请函
2014/02/01 职场文书
报案材料怎么写
2015/05/25 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
心理学培训心得体会
2016/01/22 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
mysql脏页是什么
2021/07/26 MySQL
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android
利用Java连接Hadoop进行编程
2022/06/28 Java/Android
python manim实现排序算法动画示例
2022/08/14 Python