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的表格隔行换色,移动换色,点击换色插件
Dec 22 Javascript
JQuery在循环中绑定事件的问题详解
Jun 02 Javascript
前端分页功能的实现以及原理(jQuery)
Jan 22 Javascript
Angular.js实现动态加载组件详解
May 28 Javascript
vue.js 获取当前自定义属性值
Jun 01 Javascript
基于AngularJS的简单使用详解
Sep 10 Javascript
jQuery选择器之属性过滤选择器详解
Sep 28 jQuery
使用layui 渲染table数据表格的实例代码
Aug 19 Javascript
JavaScript实现shuffle数组洗牌操作示例
Jan 03 Javascript
vue车牌号校验和银行校验实战
Jan 23 Javascript
Vue仿微信app页面跳转动画效果
Aug 21 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
Nov 17 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
我的论坛源代码(四)
2006/10/09 PHP
php入门教程 精简版
2009/12/13 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
javascript 多级checkbox选择效果
2009/08/20 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
jQuery中click事件用法实例
2014/12/26 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
JS+Canvas绘制时钟效果
2020/08/20 Javascript
js倒计时小实例(多次定时)
2016/12/08 Javascript
js实现华丽的九九乘法表效果
2017/03/29 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
基于iview的router常用控制方式
2019/05/30 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
Python文件及目录操作实例详解
2015/06/04 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
Python实现加密的RAR文件解压的方法(密码已知)
2020/09/11 Python
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
培训主管的岗位职责
2013/11/23 职场文书
《回乡偶书》教学反思
2014/04/12 职场文书
快餐公司创业计划书
2014/04/29 职场文书
小学音乐课教学反思
2016/02/18 职场文书
《三国志》赏析
2019/08/27 职场文书