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 相关文章推荐
初学Javascript的一些总结
Nov 03 Javascript
Javascript和Ajax中文乱码吐血版解决方案
Dec 21 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
Nov 29 Javascript
javascript验证内容为数字以及长度为10的简单实例
Aug 20 Javascript
jquery 手势密码插件
Mar 17 Javascript
layerUI下的绑定事件实例代码
Aug 17 Javascript
JS实现指定区域的全屏显示功能示例
Apr 25 Javascript
IE11下处理Promise及Vue的单项数据流问题
Jul 24 Javascript
layui table复选框禁止某几条勾选的实例
Sep 20 Javascript
layui文件上传控件带更改后数据传值的方法
Sep 23 Javascript
BootstrapValidator验证用户名已存在(ajax)
Nov 08 Javascript
国内常用的js类库大全(CDN公共库)
Jun 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采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
javascript模拟C#格式化字符串
2015/08/26 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
js实现控制textarea输入字符串的个数,鼠标按下抬起判断输入字符数
2016/10/25 Javascript
Vue2.0如何发布项目实战
2017/07/27 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
js new Date()实例测试
2019/10/31 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
python概率计算器实例分析
2015/03/25 Python
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
python通过Windows下远程控制Linux系统
2018/06/20 Python
jupyter notebook 增加kernel教程
2020/04/10 Python
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
工作个人的自我评价
2014/01/14 职场文书
药剂专业自荐信范文
2014/04/16 职场文书
比赛口号大全
2014/06/10 职场文书
初中同学会活动方案
2014/08/22 职场文书
群众路线学习笔记范文
2014/11/06 职场文书
演讲稿:态度决定一切
2019/04/02 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS