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 相关文章推荐
用javascript动态调整iframe高度的方法
Mar 06 Javascript
javascript 语法基础 想学习js的朋友可以看看
Dec 16 Javascript
JavaScript学习笔记记录我的旅程
May 23 Javascript
关于JavaScript中原型继承中的一点思考
Jul 25 Javascript
JQuery实现用户名无刷新验证的小例子
Mar 22 Javascript
jquery实现图片按比例缩放示例
Jul 01 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
Jun 05 Javascript
js实现获取div坐标的方法
Nov 16 Javascript
js自制图片放大镜功能
Jan 24 Javascript
详解Vue2.0之去掉组件click事件的native修饰
Apr 20 Javascript
使用socket.io制做简易WEB聊天室
Jan 02 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
Jan 16 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
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
php实现的ping端口函数实例
2014/11/12 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
javascript 数组排序函数
2009/08/20 Javascript
range 标准化之获取
2011/08/28 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
python网络编程学习笔记(一)
2014/06/09 Python
Python中获取网页状态码的两个方法
2014/11/03 Python
python基本语法练习实例
2017/09/19 Python
python requests爬取高德地图数据的实例
2018/11/10 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
Python图片的横坐标汉字实例
2019/12/04 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
雅诗兰黛加拿大官网:Estee Lauder加拿大
2019/07/31 全球购物
为什么UNION ALL比UNION快
2016/03/17 面试题
GWebs公司笔试题
2012/05/04 面试题
应届生幼儿园求职信
2013/11/12 职场文书
医学专业五年以上个人求职信
2013/12/03 职场文书
新员工入职感言
2014/02/01 职场文书
婚前财产公证书
2014/04/10 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
科技活动周标语
2014/10/08 职场文书
公司2015年终工作总结
2015/05/26 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
MySQL索引失效的典型案例
2021/06/05 MySQL
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python
ant design vue的form表单取值方法
2022/06/01 Vue.js