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 调试javascript的工具
Apr 29 Javascript
从零开始学习jQuery (二) 万能的选择器
Oct 01 Javascript
谈谈JavaScript中的函数与闭包
Apr 14 Javascript
js兼容的placeholder属性详解
Aug 18 Javascript
jquery操作复选框(checkbox)的12个小技巧总结
Feb 04 Javascript
判断及设置浏览器全屏模式
Apr 20 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
Jun 25 Javascript
jquery实现简单的轮换出现效果实例
Jul 23 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
Mar 11 Javascript
JS图片预加载插件详解
Jun 21 Javascript
JavaScript中严格判断NaN的方法
Feb 16 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
Sep 10 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
推荐一篇入门级的Class文章
2007/03/19 PHP
Linux中为php配置伪静态
2014/12/17 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
JavaScript 私有成员分析
2009/01/13 Javascript
再论Javascript下字符串连接的性能
2011/03/05 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
深入理解Javascript中this的作用域
2014/08/12 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
仿照Element-ui实现一个简易的$message方法
2020/09/14 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
python二叉树的实现实例
2013/11/21 Python
Python文件及目录操作实例详解
2015/06/04 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
PySide2出现“ImportError: DLL load failed: 找不到指定的模块”的问题及解决方法
2020/06/10 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
总会计师岗位职责
2014/02/19 职场文书
班班通项目实施方案
2014/02/25 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书