TableSort.js表格排序插件使用方法详解


Posted in Javascript onFebruary 10, 2017

本文实例为大家分享了TableSort.js表格排序的具体代码,供大家参考,具体内容如下

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>TableSort</title> 
<style type="text/css"> 
table { 
  border-collapse: collapse; 
  width: 300px; 
} 
table caption { 
  border-right: 1px solid #abc; 
  border-left: 1px solid #abc; 
  border-top: 2px solid #000; 
  border-bottom: 2px solid #000; 
  background-color: #afd; 
} 
#sales tr, #sales td { 
  border: 1px solid #abc; 
  text-align: center; 
} 
</style> 
</head> 
<body> 
<table id="sales" summary="summary here"> 
 <caption> 
 Main Title 
 </caption> 
 <col/> 
 <col/> 
 <col/> 
 <thead> 
  <tr> 
   <th class="asc">Col1</th> 
   <th>Col2</th> 
   <th>Col3</th> 
  </tr> 
 </thead> 
 <tbody> 
  <tr> 
   <td>A1</td> 
   <td>S2</td> 
   <td>W3</td> 
  </tr> 
  <tr> 
   <td>B1</td> 
   <td>C2</td> 
   <td>V3</td> 
  </tr> 
  <tr> 
   <td>C1</td> 
   <td>X2</td> 
   <td>K3</td> 
  </tr> 
 </tbody> 
 <!-- tfoot><tr><td cols=3 >other description</td></tr></tfoot --> 
</table> 
<button onclick="fn()">Test</button> 
<script language="javascript"> 
function TableSort(id) { 
  this.tbl = document.getElementById(id); 
  this.lastSortedTh = null; 
  if (this.tbl && this.tbl.nodeName == "TABLE") { 
    var headings = this.tbl.tHead.rows[0].cells; 
    for (var i = 0; headings[i]; i++) { 
      if (headings[i].className.match(/asc|dsc/)) { 
        this.lastSortedTh = headings[i]; 
      } 
    } 
    this.makeSortable(); 
  } 
} 
TableSort.prototype.makeSortable = function() { 
  var headings = this.tbl.tHead.rows[0].cells; 
  for (var i = 0; headings[i]; i++) { 
    headings[i].cIdx = i; 
    var a = document.createElement("a"); 
    a.href = "#"; 
    a.innerHTML = headings[i].innerHTML; 
    a.onclick = function(that) { 
      return function() { 
        that.sortCol(this); 
        return false; 
      } 
    }(this); 
    headings[i].innerHTML = ""; 
    headings[i].appendChild(a); 
  } 
} 
TableSort.prototype.sortCol = function(el) { 
  var rows = this.tbl.rows; 
  var alpha = [], numeric = []; 
  var aIdx = 0, nIdx = 0; 
  var th = el.parentNode; 
  var cellIndex = th.cIdx; 
 
  for (var i = 1; rows[i]; i++) { 
    var cell = rows[i].cells[cellIndex]; 
    var content = cell.textContent ? cell.textContent : cell.innerText; 
    var num = content.replace(/(\$|\,|\s)/g, ""); 
    if (parseFloat(num) == num) { 
      numeric[nIdx++] = { 
        value : Number(num), 
        row : rows[i] 
      } 
    } else { 
      alpha[aIdx++] = { 
        value : content, 
        row : rows[i] 
      } 
    } 
  } 
  function bubbleSort(arr, dir) { 
    var start, end; 
    if (dir === 1) { 
      start = 0; 
      end = arr.length; 
    } else if (dir === -1) { 
      start = arr.length - 1; 
      end = -1; 
    } 
    var unsorted = true; 
    while (unsorted) { 
      unsorted = false; 
      for (var i = start; i != end; i = i + dir) { 
        if (arr[i + dir] && arr[i].value > arr[i + dir].value) { 
          var temp = arr[i]; 
          arr[i] = arr[i + dir]; 
          arr[i + dir] = temp; 
          unsorted = true; 
        } 
      } 
    } 
    return arr; 
  } 
 
  var col = [], top, bottom; 
  if (th.className.match("asc")) { 
    top = bubbleSort(alpha, -1); 
    bottom = bubbleSort(numeric, -1); 
    th.className = th.className.replace(/asc/, "dsc"); 
  } else { 
    top = bubbleSort(numeric, 1); 
    bottom = bubbleSort(alpha, 1); 
    if (th.className.match("dsc")) { 
      th.className = th.className.replace(/dsc/, "asc"); 
    } else { 
      th.className += "asc"; 
    } 
  } 
  if (this.lastSortedTh && th != this.lastSortedTh) { 
    this.lastSortedTh.className = this.lastSortedTh.className.replace( 
        /dsc|asc/g, ""); 
  } 
  this.lastSortedTh = th; 
  col = top.concat(bottom); 
  var tBody = this.tbl.tBodies[0]; 
  for (var i = 0; col[i]; i++) { 
    tBody.appendChild(col[i].row); 
  } 
} 
function fn() { 
 
  var sales = document.getElementById('sales'); 
  var sortTable = new TableSort('sales'); 
} 
</script> 
</body> 
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
从阿里妈妈发现的几个不错的表单验证函数
Sep 21 Javascript
js 表单验证方法(实用)
Apr 28 Javascript
ajax上传时参数提交不更新等相关问题
Dec 11 Javascript
js 获取元素下面所有li的两种方法
Apr 14 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
Jun 01 Javascript
JS匿名函数实例分析
Nov 26 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
Jan 23 Javascript
详解Vue 方法与事件处理器
Jun 20 Javascript
微信禁止下拉查看URL的处理方法
Sep 28 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
Feb 10 Javascript
深入分析JavaScript 事件循环(Event Loop)
Jun 19 Javascript
在Vuex中Mutations修改状态操作
Jul 24 Javascript
微信小程序 JS动态修改样式的实现代码
Feb 10 #Javascript
基于jQuery实现简单人工智能聊天室
Feb 10 #Javascript
基于jQuery实现咖啡订单管理简单应用
Feb 10 #Javascript
基于jQuery实现弹幕APP
Feb 10 #Javascript
BOM之navigator对象和用户代理检测
Feb 10 #Javascript
基于JQuery及AJAX实现名人名言随机生成器
Feb 10 #Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
Feb 10 #Javascript
You might like
PHP读取PPT文件的方法
2015/12/10 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
解析使用js判断只能输入数字、字母等验证的方法(总结)
2013/05/14 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
2016/06/16 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
CKeditor4 字体颜色功能配置方法教程
2019/06/26 Javascript
详解使用WebPack搭建React开发环境
2019/08/06 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
Python中类的初始化特殊方法
2017/12/01 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
Belle Maison倍美丛官网:日本千趣会旗下邮购网站
2016/07/22 全球购物
智利最大的网上商店:Linio智利
2016/11/24 全球购物
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
大学生创业感言
2014/01/25 职场文书
网吧消防安全制度
2014/01/28 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
小学母亲节活动总结
2015/02/10 职场文书
办公室岗位职责范本
2015/04/11 职场文书
新闻稿格式范文
2015/07/18 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python