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 相关文章推荐
event.srcElement+表格应用
Aug 29 Javascript
基于jquery的动态创建表格的插件
Apr 05 Javascript
javascript的数组和常用函数详解
May 09 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
May 26 Javascript
JQuery实现图片轮播效果
May 08 jQuery
JavaScript 中调用 Kotlin 方法实例详解
Jun 09 Javascript
JavaScript贪吃蛇小组件实例代码
Aug 20 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
Nov 08 jQuery
js登录滑动验证的实现(不滑动无法登陆)
Jan 03 Javascript
angular 服务随记小结
May 06 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
May 14 Javascript
用JS实现一个简单的打砖块游戏
Dec 11 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中文件上传的一个问题
2010/09/04 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
2014/03/20 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
Laravel框架模板继承操作示例
2018/06/11 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
基于jQuery的动态表格插件
2011/03/28 Javascript
Javascript访问器属性实例分析
2014/12/30 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
Vue 表情包输入组件的实现代码
2019/01/21 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
前端如何实现动画过渡效果
2021/02/05 Javascript
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
python2.7的编码问题与解决方法
2016/10/04 Python
python3调用R的示例代码
2018/02/23 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Windows上安装tensorflow  详细教程(图文详解)
2020/02/04 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
基于注解实现 SpringBoot 接口防刷的方法
2021/03/02 Python
局域网标准
2016/09/10 面试题
2014班子“三严三实”对照检查材料思想汇报
2014/09/18 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
Python函数中的不定长参数相关知识总结
2021/06/24 Python