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实现的鼠标链接提示效果生成器代码
Jun 28 Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 Javascript
javascript实现跳转菜单的具体方法
Jul 05 Javascript
JS的千分位算法实现思路
Jul 31 Javascript
Vue.js Ajax动态参数与列表显示实现方法
Oct 20 Javascript
vue2.0+webpack环境的构造过程
Nov 08 Javascript
JavaScript获取当前时间向前推三个月的方法示例
Feb 04 Javascript
vue router学习之动态路由和嵌套路由详解
Sep 21 Javascript
Promise扫盲贴
Jun 24 Javascript
vue 限制input只能输入正数的操作
Aug 05 Javascript
微信小程序中data-key属性之数据传输(经验总结)
Aug 22 Javascript
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 Vue.js
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作的文本留言本的例子(五)
2006/10/09 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
thinkphp框架下404页面设置 仅三步
2016/05/14 PHP
PHP判断是否是微信打开还是浏览器打开的方法
2019/02/27 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
最丑的时钟效果!js canvas时钟制作方法
2016/08/15 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
JS高级运动实例分析
2016/12/20 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
javascript简单写的判断电话号码实例
2017/05/24 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
Vue $emit $refs子父组件间方法的调用实例
2018/09/12 Javascript
iView框架问题整理小结
2018/10/16 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
Python验证码识别的方法
2015/07/10 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
2018/03/05 Python
使用Python做定时任务及时了解互联网动态
2019/05/15 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
解决jupyter notebook import error但是命令提示符import正常的问题
2020/04/15 Python
如何将Pycharm中调整字体大小的方式设置为&quot;ctrl+鼠标滚轮上下滑&quot;
2020/11/17 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
英国最好的温室之家:Greenhouses Direct
2019/07/13 全球购物
接口的多继承会带来哪些问题
2015/08/17 面试题
路政管理求职信
2014/06/18 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
小学生安全教育心得体会
2016/01/15 职场文书
Python数据可视化之用Matplotlib绘制常用图形
2021/06/03 Python