JS实现HTML表格排序功能

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

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

(0)

相关推荐

  • JS实现简单表格排序操作示例

    本文实例讲述了JS实现简单表格排序操作.分享给大家供大家参考,具体如下: <!DOCTYPE> <html> <head> <meta http-equiv="Content-type" content="text/html" charset="utf-8"> <title>sort table</title> <style> *{ margin:0px; pad

  • tablesorter.js表格排序使用方法(支持中文排序)

    最近,因为项目需要,对表格排序做了一下摸索,整理如下: 1. 首先,可从官网下载tablesorter.js,但并不支持中文的排序,对其源码进行修改: 部分源码: function sortText(a, b) { return ((a < b) ? -1 : ((a > b) ? 1 : 0)); }; function sortTextDesc(a, b) { return ((b < a) ? -1 : ((b > a) ? 1 : 0)); }; 修改后: function

  • JavaScript Sort 表格排序

    1.你真的懂JavaScript里面的Sort方法吗? 2.你知道JavaScript中 localeCompare 方法的函数体吗? 3.表格排序 方法 要哪些参数? JavaScript中的sort方法直接就提供了排序的功能,不需要我们自己写个循环一个个的判断.但其机制仍然是那样的, 复制代码 代码如下: window.onload=function(){ var MyArr=new Array("red","green","gray");

  • 33种Javascript 表格排序控件收集

    1. jQuery tablesorter http://tablesorter.com/docs/ 2. Table sorting with Prototype http://tetlaw.id.au/view/blog/table-sorting-with-prototype/ 3. Sorttable http://www.kryogenix.org/code/browser/sorttable/ 4. Table Sorting Javascript http://yoast.com/

  • javascript 表格排序和表头浮动效果(扩展SortTable)

    一.SortTable说明 SortTable version 2 7th April 2007 Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/ Instructions: Download this file Add <script src="sorttable.js"></script> to your HTML Add class="sortable"

  • 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

  • 分享一个自己写的table表格排序js插件(高效简洁)

    像:jQuery的table排序插件(感觉其使用比较麻烦或不清楚其具体用法,就没有使用).原生态js的table排序插件等,最后比较看了下--采用了一个原生态js的table排序插件,并在其基础上做了些修改,虽有些勉强或有些地方使用不太舒服,但最算是比较好的实现了当时需要的功能.而前两天,对原有表格做了点儿修改--增加隔行换色的功能,问题就出现了,--效果错乱:检查分析了下,问题出在其table排序插件代码上--其原代码写的比较难理解,修改还不如重新自己写一个table排序插件. 说写就写,ta

  • js 表格排序(编辑+拖拽+缩放)

    Table body{ font-size:12px} #tab{ border-collapse: collapse;} .edit{ height:16px; width:98%; background-color:#EFF7FF; font-size:12px; border:0px;} #tab thead td{ background:url(/upload/201005/20100531233452190.bmp);color:#183C94} #tab tbody td{ over

  • javascript多种数据类型表格排序代码分析

    中文汉字排序. 中英文混合排序. 数据大小排序. 文件类型排序(后缀名排序) 日期时间排序. 价格排序. 中文混合数字排序; 使用方法:文档载入后new tableListSort(arguments,arguments). 接受两个参数:第一个参数为必须的,可以是字符串ID,也可以是table对象;第二个可选参数,此参数为一个对象,{data:index,fileType:index,fn:function(){}}:对象有三个可选的属性,第一个和第二个为扩展排序的数据类型,第三个参数为排序后

  • 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/xht

  • js 静态HTML表格排序功能实现

    无标题文档 *{font-family:Arial, Helvetica, sans-serif;font-size:14px;border:none;} body{text-align:center;} table{margin:100px auto;} td{width:100px;height:24px;text-align:center;line-height:24px;border:1px solid silver;} .red{color:red;} .top{background:

随机推荐