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 相关文章推荐
jQuery 移动端artEditor富文本编辑器
Jan 11 Javascript
实践中学习AngularJS表单
Mar 21 Javascript
JavaScript基于原型链的继承
Jun 22 Javascript
jQuery得到多个值只能用取Class ,不能用取ID的方法
Dec 04 Javascript
JavaScript中闭包的详解
Apr 01 Javascript
详解在vue-cli中使用路由
Sep 25 Javascript
微信小程序实现滚动消息通知
Feb 02 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
Aug 31 Javascript
Vue组件Draggable实现拖拽功能
Dec 01 Javascript
vue项目中使用scss的方法步骤
May 16 Javascript
js在HTML的三种引用方式详解
Aug 29 Javascript
JavaScript前端面试扁平数据转tree与tree数据扁平化
Jun 14 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 神盾解密工具
2014/06/08 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
jsTree使用记录实例
2016/12/01 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
元素全屏的设置与监听实例
2017/11/28 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
python进阶教程之动态类型详解
2014/08/30 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
Python面向对象编程基础解析(一)
2017/10/26 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
2018/01/24 Python
Python爬虫实现(伪)球迷速成
2018/06/10 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Django实现学生管理系统
2019/02/26 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
纯css3实现的鼠标悬停动画按钮
2014/12/23 HTML / CSS
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
有针对性的求职自荐信
2013/11/14 职场文书
医务人员自我评价
2014/01/26 职场文书
签字仪式主持词
2015/07/03 职场文书
浅谈Redis位图(Bitmap)及Redis二进制中的问题
2021/07/15 Redis
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技