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 相关文章推荐
Discuz! 6.1_jQuery兼容问题
Sep 23 Javascript
使用PHP+JQuery+Ajax分页的实现
Apr 23 Javascript
jQuery判断密码强度实现思路及代码
Apr 24 Javascript
禁用页面部分JavaScript方法的具体实现
Jul 31 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
Dec 03 Javascript
详解js中构造流程图的核心技术JsPlumb(2)
Dec 08 Javascript
jQuery中的select操作详解
Nov 29 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
Sep 20 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 jQuery
js单线程的本质 Event Loop解析
Oct 29 Javascript
JavaScript实现拖拽盒子效果
Feb 06 Javascript
如何检测JavaScript中的死循环示例详解
Aug 30 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 STRING 陷阱原理说明
2010/07/24 PHP
php实现图片添加水印功能
2014/02/13 PHP
php数组添加元素方法小结
2014/12/20 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
一个javascript参数的小问题
2008/03/02 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
jQuery三级下拉列表导航菜单代码分享
2020/04/15 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
2015/10/14 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
修改node.js默认的npm安装目录实例
2018/05/15 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
node.JS路径解析之PATH模块使用方法详解
2020/02/06 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
在Python中操作字典之update()方法的使用
2015/05/22 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
python随机数分布random测试
2018/08/27 Python
在pycharm中设置显示行数的方法
2019/01/16 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
python 将dicom图片转换成jpg图片的实例
2020/01/13 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
使用HTML5 Geolocation实现一个距离追踪器
2018/04/09 HTML / CSS
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
高考寄语大全
2014/04/08 职场文书
升职演讲稿范文
2014/05/23 职场文书
公司董事长岗位职责
2014/06/08 职场文书
少先队中队工作总结
2015/08/14 职场文书
python开发实时可视化仪表盘的示例
2021/05/07 Python
Python办公自动化解决world文件批量转换
2021/09/15 Python