JS实现HTML表格排序功能


Posted in Javascript onAugust 05, 2016

本文实例为大家分享了JavaScript实现HTML表格排序功能,供大家参考,具体内容如下

HTML代码:

<table cellpadding="0" id="table">
    <tr class="top">
      <td>click me</td>
      <td>click me</td>
      <td>click me</td>
      <td>click me</td>
    </tr>
    <tr>
      <td>
        <span id="bfn_la_bac.usa">15.43</span>
      </td>
      <td class="red">700</td>
      <td>1.220</td>
      <td class="red">阿</td>
    </tr>
    <tr>
      <td>
        <span id="bfn_la_c.usa">7.05</span>
      </td>
      <td class="red">4</td>
      <td>3,000</td>
      <td class="red">炳</td>
    </tr>
    <tr>
      <td>
        <span id="bfn_la_jpm.usa">30.62</span>
      </td>
      <td class="red">30</td>
      <td>2,558,800</td>
      <td class="red">和</td>
    </tr>
    <tr>
      <td>
        <span id="bfn_la_axp.usa">22.30</span>
      </td>
      <td class="red">5</td>
      <td>6</td>
      <td class="red">瞎</td>
    </tr>
    <tr>
      <td>
        <span id="bfn_la_mrk.usa">26.31</span>
      </td>
      <td class="red">0.6</td>
      <td>5</td>
      <td class="red">-</td>
    </tr>
    <tr>
      <td>
        <span id="bfn_la_pg.usa">63.16</span>
      </td>
      <td class="red">7</td>
      <td>4</td>
      <td class="red">子</td>
    </tr>
  </table>

JavaScirpt代码:

var tableSort = function(){ 
  this.initialize.apply(this,arguments); 
} 
tableSort.prototype = { 
  initialize : function(tableId,clickRow,startRow,endRow,classUp,classDown,selectClass){ 
    this.Table = document.getElementById(tableId); 
    this.rows = this.Table.rows;//所有行 
    this.Tags = this.rows[clickRow-1].cells;//标签td 
    this.up = classUp; 
    this.down = classDown; 
    this.startRow = startRow; 
    this.selectClass = selectClass; 
    this.endRow = (endRow == 999? this.rows.length : endRow); 
    this.T2Arr = this._td2Array();//所有受影响的td的二维数组 
    this.setShow(); 
  }, 
  //设置标签切换 
  setShow:function(){ 
    var defaultClass = this.Tags[0].className; 
    for(var Tag ,i=0;Tag = this.Tags[i];i++){ 
      Tag.index = i; 
      addEventListener(Tag ,'click', Bind(Tag,statu)); 
    } 
    var _this =this; 
    var turn = 0; 
    function statu(){ 
      for(var i=0;i<_this.Tags.length;i++){ 
        _this.Tags[i].className = defaultClass; 
      } 
      if(turn==0){ 
        addClass(this,_this.down) 
        _this.startArray(0,this.index); 
        turn=1; 
      }else{ 
        addClass(this,_this.up) 
        _this.startArray(1,this.index); 
        turn=0; 
      } 
    } 
  }, 
  //设置选中列样式 
  colClassSet:function(num,cla){ 
    //得到关联到的td 
    for(var i= (this.startRow-1);i<(this.endRow);i++){ 
      for(var n=0;n<this.rows[i].cells.length;n++){ 
        removeClass(this.rows[i].cells[n],cla); 
      } 
      addClass(this.rows[i].cells[num],cla); 
    } 
  }, 
  //开始排序 num 根据第几列排序 aord 逆序还是顺序 
  startArray:function(aord,num){ 
    var afterSort = this.sortMethod(this.T2Arr,aord,num);//排序后的二维数组传到排序方法中去 
    this.array2Td(num,afterSort);//输出 
  }, 
  //将受影响的行和列转换成二维数组 
  _td2Array:function(){ 
    var arr=[]; 
      for(var i=(this.startRow-1),l=0;i<(this.endRow);i++,l++){ 
        arr[l]=[]; 
        for(var n=0;n<this.rows[i].cells.length;n++){ 
          arr[l].push(this.rows[i].cells[n].innerHTML); 
        } 
      } 
    return arr; 
  }, 
  //根据排序后的二维数组来输出相应的行和列的 innerHTML 
  array2Td:function(num,arr){ 
    this.colClassSet(num,this.selectClass); 
    for(var i= (this.startRow-1),l=0;i<(this.endRow);i++,l++){ 
      for(var n=0;n<this.Tags.length;n++){ 
        this.rows[i].cells[n].innerHTML = arr[l][n]; 
      } 
    } 
  }, 
  //传进来一个二维数组,根据二维数组的子项中的w项排序,再返回排序后的二维数组 
  sortMethod:function(arr,aord,w){ 
    arr.sort(function(a,b){ 
      x = killHTML(a[w]); 
      y = killHTML(b[w]); 
      x = x.replace(/,/g,''); 
      y = y.replace(/,/g,''); 
      switch (isNaN(x)){ 
      case false: 
      return Number(x) - Number(y); 
      break; 
      case true: 
      return x.localeCompare(y); 
      break; 
      } 
    }); 
    arr = aord==0?arr:arr.reverse(); 
    return arr; 
  } 
} 
/*-----------------------------------*/ 
function addEventListener(o,type,fn){ 
  if(o.attachEvent){
    o.attachEvent('on'+type,fn);
  }else if(o.addEventListener){
    o.addEventListener(type,fn,false);
  }else{
    o['on'+type] = fn;
  } 
} 
function hasClass(element, className) { 
  var reg = new RegExp('(\s|^)'+className+'(\s|$)'); 
  return element.className.match(reg); 
} 
function addClass(element, className) { 
  if (!this.hasClass(element, className)) { 
    element.className += " "+className; 
  } 
} 
function removeClass(element, className) { 
  if (hasClass(element, className)) { 
    var reg = new RegExp('(\s|^)'+className+'(\s|$)'); 
    element.className = element.className.replace(reg,' '); 
  } 
} 
var Bind = function(object, fun) { 
  return function() { 
    return fun.apply(object, arguments); 
  } 
} 
//去掉所有的html标记 
function killHTML(str){ 
  return str.replace(/<[^>]+>/g,""); 
} 
//------------------------------------------------ 
//tableid 第几行是标签行,从第几行开始排序,第几行结束排序(999表示最后) 升序标签样式,降序标签样式 选中列样式 
//注意标签行的class应该是一致的 
var ex1 = new tableSort('table',1,2,999,'up','down','hov');

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

Javascript 相关文章推荐
使用户点击后退按钮使效三行代码
Jul 07 Javascript
提高网站信任度的技巧
Oct 17 Javascript
THREE.JS入门教程(5)你应当知道的十件事
Jan 24 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
Nov 29 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
Feb 20 Javascript
使用jquery实现仿百度自动补全特效
Jul 23 Javascript
逻辑表达式中与或非的用法详解
Jun 06 Javascript
利用BootStrap弹出二级对话框的简单实现方法
Sep 21 Javascript
原生javascript实现的ajax异步封装功能示例
Nov 03 Javascript
js 获取json数组里面数组的长度实例
Oct 31 Javascript
vue中英文切换实例代码
Jan 21 Javascript
有趣的JavaScript隐式类型转换操作实例分析
May 02 Javascript
JavaScript如何实现跨域请求
Aug 05 #Javascript
JavaScript数组操作函数汇总
Aug 05 #Javascript
Jquery获取当前城市的天气信息
Aug 05 #Javascript
JavaScript蒙板(model)功能的简单实现代码
Aug 04 #Javascript
Three.js学习之Lamber材质和Phong材质
Aug 04 #Javascript
基于JavaScript实现在新的tab页打开url
Aug 04 #Javascript
同步文本框内容JS代码实现
Aug 04 #Javascript
You might like
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
PHP获取Exif缩略图的方法
2015/07/13 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
自编jQuery插件实现模拟alert和confirm
2014/09/01 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
分享一个原生的JavaScript拖动方法
2016/09/25 Javascript
jQuery实现发送验证码并60秒倒计时功能
2016/11/25 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
JS原形与原型链深入详解
2020/05/09 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
Python文件处理
2016/02/29 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
linux面试题参考答案(9)
2015/01/07 面试题
大学生求职中的自我评价
2013/10/01 职场文书
结构工程研究生求职信
2013/10/13 职场文书
2014年元旦联欢会活动策划方案
2014/02/16 职场文书
心理健康活动总结
2014/04/30 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
安全教育第一课观后感
2015/06/17 职场文书
2015大学迎新标语
2015/07/16 职场文书
运动会广播稿300字
2015/08/19 职场文书
Python中常见的导入方式总结
2021/05/06 Python
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS