JS实现HTML表格排序功能_javascript技巧

本文实例为大家分享了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');

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索js实现表格排序
, html表格排序
html表格数据排序
javascript 表格排序、jquery实现表格排序、js实现表格升降排序、js实现表格排序、javascript冒泡排序,以便于您获取更多的相关知识。

时间: 2024-09-13 08:16:15

JS实现HTML表格排序功能_javascript技巧的相关文章

JS简单实现表格排序功能示例_javascript技巧

本文实例讲述了JS简单实现表格排序功能的方法.分享给大家供大家参考,具体如下: 思路:遍历每个li,并把它们存放到数组中去,然后通过sort()方法进行排序,再插入 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="htt

JS怎么实现表格排序功能实例

本文实例讲述了JS简单实现表格排序功能的方法.分享给大家供大家参考,具体如下: 思路:遍历每个li,并把它们存放到数组中去,然后通过sort()方法进行排序,再插入 <!DOCTYPE html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http

JavaScript实现表格排序方法_javascript技巧

参考代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equ

JS中数组重排序方法_javascript技巧

1.数组中已存在两个可直接用来重排序的方法:reverse()和sort(). reverse()和sort()方法的返回值是经过排序后的数组.reverse()方法会反转数组项的顺序: var values=[1,2,3,4,5]; values.reverse(); alert(values); //5,4,3,2,1 在默认情况下,sort()方法按升序排列数组,sort()方法会调用每个数组项的toString()转型方法,然后比较得到字符串,确定如何排序.即使数组中的每一项都是数值,s

用一段js程序来实现动画功能_javascript技巧

自从ie对flash的显示方式进行改变后,flash这个东西一下子变成了一个鸡肋. 许许多多的网站都撤掉了以前的flash动画,改用一段js程序来实现动画功能. csdn首页也是如此..我无聊,自己写了一个,特点如下: 1.对搜索引擎友好 2.对美工友好,因为数据和代码是分开的,完全不懂js的都可以用fontpage修改动画内容 可以把js代码保存为一个文件 然后<script src="1.js"></script>,然后无须修改代码一个字母 就可以在多个页面

js 静态HTML表格排序功能实现_javascript技巧

kick me kick me kick me kick me 15.43 700 1.220 阿 7.05 4 3,000 炳 30.62 30 2,558,800 和 22.30 5 6 瞎 26.31 0.6 5 - 63.16 7 4 子

javascript 带有滚动条的表格,标题固定,带排序功能._javascript技巧

复制代码 代码如下: //使用要求: //1.将表格的Class命名为:sorttableHold, //2.表格放置在一个div中,此div设有overflow属性. //3.表格要求有ID,div要求有ID //4.要有JQuery.min.js文件 //5.OK. addEvent(window, "load", sortables_init); var SORT_COLUMN_INDEX; function sortables_init() { // Find all tabl

利用Vue.js指令实现全选功能_javascript技巧

因为刚开始接触vue不久,全选的实现参考了知乎上的实现方法:      1.从服务器拿到数据,为每个item设置checked属性      2.计算选中的数量selectCount,如果选中的数量与selectItems的数量相等,则全选selectAll选中      3.点全选时,将每个item的checked属性置为true,反选时置为false,      4.每次selectItems的属性发生变化时,都将checked的为true的item放入数组checkedGroups中 下面

用js实现博客打赏功能_javascript技巧

前几天在一个博客中看到有一个打赏功能.其实简单说来就是在页面中加入动态DOM节点,使用的也是简单的HTML.CSS.JS这些前端的一些简单知识.在GitHub上有开源的代码,这里稍加改造就可以用在自己的博客中了. 最简单的使用方式是在页面中加入如下JS代码: <script> window.tctipConfig = { staticPrefix: "http://static.tctip.com", buttonImageId: 1, buttonTip: "z