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 相关文章推荐
将CKfinder整合进CKEditor3.0的新方法
Jan 10 Javascript
判断访客终端类型集锦
Jun 05 Javascript
简介JavaScript中Math.LOG10E属性的使用
Jun 14 Javascript
JS实现简单的图书馆享元模式实例
Jun 30 Javascript
Javascript函数式编程语言
Oct 11 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
Nov 18 Javascript
JS仿京东移动端手指拨动切换轮播图效果
Apr 10 Javascript
原生js实现可拖动的登录框效果
Jan 21 Javascript
Ajax基础知识详解
Feb 17 Javascript
vue中使用ueditor富文本编辑器
Feb 08 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
Sep 01 Javascript
js实现页面图片消除效果
Mar 24 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
php 获取mysql数据库信息代码
2009/03/12 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
jquery 元素相对定位代码
2010/10/15 Javascript
Easy.Ajax 部分源代码 支持文件上传功能, 兼容所有主流浏览器
2011/02/24 Javascript
jQuery下的动画处理总结
2013/10/10 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
2016/07/07 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
vue.js实现表格合并示例代码
2016/11/30 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
vue获取form表单的值示例
2019/10/29 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
python取代netcat过程分析
2018/02/10 Python
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
python创建文本文件的简单方法
2020/08/30 Python
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
《七颗钻石》教学反思
2014/02/28 职场文书
教师一岗双责责任书
2014/04/16 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL