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 相关文章推荐
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
Dec 02 Javascript
js 对象是否存在判断
Jul 15 Javascript
几个比较实用的JavaScript 测试及效验工具
Apr 18 Javascript
JavaScript数据结构和算法之图和图算法
Feb 11 Javascript
Shell脚本实现Linux系统和进程资源监控
Mar 05 Javascript
浅谈JavaScript 中有关时间对象的方法
Aug 15 Javascript
easyui-datagrid特殊字符不能显示的处理方法
Apr 12 Javascript
JavaScript运动框架 多值运动(四)
May 18 Javascript
详解vuejs几种不同组件(页面)间传值的方式
Jun 01 Javascript
vue项目中应用ueditor自定义上传按钮功能
Apr 27 Javascript
JavaScript之实现一个简单的Vue示例
Jan 17 Javascript
基于JS实现视频上传显示进度条
May 12 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
用header 发送cookie的php代码
2007/03/16 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
php筛选不存在的图片资源
2015/04/28 PHP
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
jQuery的学习步骤
2011/02/23 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
JavaScript登录记住密码操作(超简单代码)
2017/03/22 Javascript
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
JavaScript实现封闭区域布尔运算的示例代码
2018/06/25 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
微信小程序 image组件遇到的问题
2019/05/28 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
Python3基础之输入和输出实例分析
2014/08/18 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
Python进程间通信Queue消息队列用法分析
2019/05/22 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
关于Keras Dense层整理
2020/05/21 Python
使用SQLAlchemy操作数据库表过程解析
2020/06/10 Python
Linux开机引导的步骤是什么
2014/02/26 面试题
新郎婚宴答谢词
2014/01/19 职场文书
五一口号
2014/06/19 职场文书
广告业务员岗位职责
2015/02/13 职场文书
办公室日常管理制度
2015/08/04 职场文书
mysql序号rownum行号实现方式
2022/12/24 MySQL