JS实现点击表头表格自动排序(含数字、字符串、日期)


Posted in Javascript onJanuary 22, 2017

效果图如下:

JS实现点击表头表格自动排序(含数字、字符串、日期)

JS实现点击表头表格自动排序(含数字、字符串、日期)

Demo演示地址:点击这里

主要的JS代码如下:

var tbody = document.querySelector('#tableSort').tBodies[0];
var th = document.querySelector('#tableSort').tHead.rows[0].cells;
var td = tbody.rows;
for (var i = 0;i < th.length;i++){
  th[i].flag = 1;
  th[i].onclick = function(){
    sort(this.getAttribute('data-type'),this.flag,this.cellIndex);
    this.flag = -this.flag;
  };
};
function sort(str,flag,n){
  var arr = []; //存放DOM
  for (var i = 0;i < td.length;i++){
    arr.push(td[i]);
  };
  //排序
  arr.sort(function(a,b){
    return method(str,a.cells[n].innerHTML,b.cells[n].innerHTML) * flag;
  });
  //添加
  for (var i = 0;i < arr.length;i++){
    tbody.appendChild(arr[i]);
  };
};
//排序方法
function method(str,a,b){
  switch (str){
  case 'num': //数字排序
    return a-b;
    break;
  case 'string': //字符串排序
    return a.localeCompare(b);
    break;
  default:  //日期排序,IE8下'2012-12-12'这种格式无法设置时间,替换成'/'
    return new Date(a.split('-').join('/')).getTime()-new Date(b.split('-').join('/')).getTime();
  };
};

完整实例代码

<!DOCTYPE>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JS实现点击表头表格自动排序(含数字、字符串、日期)</title>
<style>#tableSort{moz-user-select: -moz-none;-moz-user-select: none;-o-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;user-select:none;border-collapse: collapse; border-spacing: 0; margin: 0; padding: 0;width: 100%;text-align: center;margin:15px 0;}
	#tableSort th{cursor: pointer; background: #eee}
	#tableSort tr:nth-child(even){background: #f9f9f9}
	#tableSort th,#tableSort td{padding: 10px; border:1px solid #ccc;}
</style>
</head>

<body>
<table id="tableSort">
<thead>
<tr>
<th data-type="num">工号</th>
<th data-type="string">姓名</th>
<th data-type="string">性别</th>
<th data-type="date">时间</th>
</tr>
</thead>
<tbody>
<tr>
<td>07</td>
<td>aaaa</td>
<td>男</td>
<td>2012-12-12</td>
</tr>
<tr>
<td>03</td>
<td>mmmm</td>
<td>女</td>
<td>2013-12-16</td>
</tr>
<tr>
<td>01</td>
<td>cccc</td>
<td>男</td>
<td>2014-12-12</td>
</tr>
<tr>
<td>04</td>
<td>ffff</td>
<td>女</td>
<td>2015-12-12</td>
</tr>
<tr>
<td>02</td>
<td>bbbb</td>
<td>男</td>
<td>2016-12-18</td>
</tr>
<tr>
<td>06</td>
<td>ssss</td>
<td>女</td>
<td>2008-10-07</td>
</tr>
<tr>
<td>05</td>
<td>tttt</td>
<td>男</td>
<td>2012-07-22</td>
</tr>
</tbody>
</table>
<script>
;(function(){
var tbody = document.querySelector('#tableSort').tBodies[0];
var th = document.querySelector('#tableSort').tHead.rows[0].cells;
var td = tbody.rows;
for(var i = 0;i < th.length;i++){
  th[i].flag = 1;
  th[i].onclick = function(){
    sort(this.getAttribute('data-type'),this.flag,this.cellIndex);
    this.flag = -this.flag;
  };
};
function sort(str,flag,n){
  var arr = [];
  for(var i = 0;i < td.length;i++){
    arr.push(td[i]);
  };
  arr.sort(function(a,b){
    return method(str,a.cells[n].innerHTML,b.cells[n].innerHTML) * flag;
  });
  for(var i = 0;i < arr.length;i++){
    tbody.appendChild(arr[i]);
  };
};
function method(str,a,b){
  switch(str){
  case 'num': 
    return a-b;
    break;
  case 'string': 
    return a.localeCompare(b);
    break;
  default:
    return new Date(a.split('-').join('/')).getTime()-new Date(b.split('-').join('/')).getTime();
  };
};
})();
</script>
</body>
</html>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
input 和 textarea 输入框最大文字限制的jquery插件
Oct 27 Javascript
js判断undefined变量类型使用typeof
Jun 03 Javascript
xtemplate node.js 的使用方法实例解析
Aug 22 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
Nov 27 Javascript
ES6中的箭头函数实例详解
Apr 06 Javascript
详解vue2父组件传递props异步数据到子组件的问题
Jun 29 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
Jan 23 Javascript
Vue 页面跳转不用router-link的实现代码
Apr 12 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
Oct 20 Javascript
vue项目中实现的微信分享功能示例
Jan 21 Javascript
在微信小程序中保存网络图片
Feb 12 Javascript
详解vue-cli+es6引入es5写的js(两种方法)
Apr 19 Javascript
node.js基于mongodb的搜索分页示例
Jan 22 #Javascript
利用JS实现文字的聚合动画效果
Jan 22 #Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 #Javascript
jQuery实现的分页功能示例
Jan 22 #Javascript
jQuery加载及解析XML文件的方法实例分析
Jan 22 #Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 #Javascript
前端开发必知的15个jQuery小技巧
Jan 22 #Javascript
You might like
php5 and xml示例
2006/11/22 PHP
php为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
PHP函数in_array()使用详解
2014/08/20 PHP
php版微信自动登录并获取昵称的方法
2016/09/23 PHP
php微信公众平台开发(三)订阅事件处理
2016/12/06 PHP
在 Laravel 项目中使用 webpack-encore的方法
2019/07/21 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
js中parseFloat(参数1,参数2)定义和用法及注意事项
2013/01/27 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
2014/05/05 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
Highcharts+NodeJS搭建数据可视化平台示例
2017/01/01 NodeJs
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
AngularJS的ng-click传参的方法
2017/06/19 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
python游戏地图最短路径求解
2019/01/16 Python
Python 控制终端输出文字的实例
2019/07/12 Python
深入了解Python在HDA中的应用
2019/09/05 Python
pycharm快捷键汇总
2020/02/14 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
使用pymysql查询数据库,把结果保存为列表并获取指定元素下标实例
2020/05/15 Python
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
小学生毕业评语
2014/12/26 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
ORACLE查看当前账号的相关信息
2021/06/18 Oracle