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 相关文章推荐
document.getElementById方法在Firefox与IE中的区别
May 18 Javascript
能说明你的Javascript技术很烂的五个原因分析
Oct 28 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
Aug 18 Javascript
JS模拟bootstrap下拉菜单效果实例
Jun 17 Javascript
JS获取和修改元素样式的实例代码
Aug 06 Javascript
探究JavaScript中的五种事件处理程序方式
Dec 07 Javascript
React组件生命周期详解
Jul 03 Javascript
详细介绍RxJS在Angular中的应用
Sep 23 Javascript
vue中实现图片和文件上传的示例代码
Mar 16 Javascript
通过函数作用域和块级作用域看javascript的作用域链
Aug 05 Javascript
vue实现添加与删除图书功能
Oct 07 Javascript
JavaScript中的执行环境和作用域链
Sep 04 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基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
在JavaScript中如何解决用execCommand(
2015/10/19 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
python简单实现获取当前时间
2016/08/27 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
Python3实现二叉树的最大深度
2019/09/30 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
pycharm的python_stubs问题
2020/04/08 Python
诚信承诺书范文
2014/03/27 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
社区党建工作总结2015
2015/05/13 职场文书
2015年教研室工作总结范文
2015/05/23 职场文书
干货分享:推荐信写作技巧!
2019/06/21 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
Python 数据科学 Matplotlib图库详解
2021/07/07 Python
10大幻兽系恶魔果实 蝙蝠果实上榜,第一自愈能力强
2022/03/18 日漫