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 相关文章推荐
javascript编程起步(第二课)
Feb 27 Javascript
Javascript 判断函数类型完美解决方案
Sep 02 Javascript
Javascript 模式实例 观察者模式
Oct 24 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
Jan 08 Javascript
js实现Select列表各项上移和下移的方法
Aug 14 Javascript
基于Javascript实现弹出页面效果
Jan 01 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
Jun 01 Javascript
JS实用技巧小结(屏蔽错误、div滚动条设置、背景图片位置等)
Jun 16 Javascript
angularjs+bootstrap实现自定义分页的实例代码
Jun 19 Javascript
JS实现unicode和UTF-8之间的互相转换互转
Jul 05 Javascript
Vue仿手机qq的实例代码(demo)
Sep 08 Javascript
Vue-CLI3.x 设置反向代理的方法
Dec 06 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生成可点击刷新的验证码简单示例
2016/05/13 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
常规表格多表头查询示例
2014/02/21 Javascript
jquery中map函数与each函数的区别实例介绍
2014/06/23 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
js使用心得分享
2015/01/13 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
jquery获取file表单选择文件的路径、名字、大小、类型
2019/01/18 jQuery
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
python3抓取中文网页的方法
2015/07/28 Python
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
Python如何定义有默认参数的函数
2020/08/10 Python
中国宠物用品商城:E宠商城
2016/08/27 全球购物
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
俄罗斯香水和化妆品购物网站:Л’Этуаль
2018/05/10 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
工程项目经理岗位职责
2013/12/15 职场文书
企业内部培训方案
2014/02/04 职场文书
软件部经理岗位职责范本
2014/02/25 职场文书
人事经理岗位职责
2014/04/28 职场文书
机电专业求职信
2014/06/14 职场文书