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 相关文章推荐
jquery api参考 visualjquery 中国线路 速度快
Nov 30 Javascript
动态载入/删除/更新外部 JavaScript/Css 文件的代码
Jul 03 Javascript
node.js不得不说的12点内容
Jul 14 Javascript
运用jQuery定时器的原理实现banner图片切换
Oct 22 Javascript
JQuery CheckBox(复选框)操作方法汇总
Apr 15 Javascript
js控制文本框输入的字符类型方法汇总
Jun 19 Javascript
浅谈addEventListener和attachEvent的区别
Jul 14 Javascript
微信小程序 Audio API详解及实例代码
Sep 30 Javascript
Vue实现带进度条的文件拖动上传功能
Feb 23 Javascript
Angularjs实现多图片上传预览功能
Jul 18 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
Aug 30 Javascript
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
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
MYSQL环境变量设置方法
2007/01/15 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
详解PHP防止直接访问.php 文件的实现方法
2017/07/28 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
PHP开发实现快递查询功能详解
2019/04/08 PHP
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
Nodejs中的this详解
2016/03/26 NodeJs
jquery 追加元素append、prepend、before、after用法与区别分析
2016/12/02 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
在vue项目中,使用axios跨域处理
2018/03/07 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
[15:23]教你分分钟做大人:虚空假面
2014/10/30 DOTA
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
Linux下编译安装MySQL-Python教程
2015/02/02 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
Ubuntu下使用python读取doc和docx文档的内容方法
2018/05/08 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
重构Python代码的六个实例
2020/11/25 Python
MAC彩妆英国官网:M·A·C UK
2018/05/30 全球购物
当当网软件测试笔试题
2015/11/24 面试题
即将毕业大学生自荐信
2014/01/24 职场文书
聚美优品恶搞广告词
2014/03/14 职场文书
指导教师评语
2014/04/26 职场文书
教师旷工检讨书
2015/08/15 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
Matplotlib绘制条形图的方法你知道吗
2022/03/21 Python