zoukankan      html  css  js  c++  java
  • javascript 实现表格排序

    样式:

    http://www.corange.cn//uploadfiles/20100418-4_31005.png

    参考代码:

    <!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-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>JavaScript控制网页内表格排序</title>
    <style> 
     *{font-family:Arial, Helvetica, sans-serif;font-size:14px;border:none;}
     body{text-align:center;}
     table{margin:100px auto;}
     td{100px;height:24px;text-align:center;line-height:24px;border:1px solid silver;}
     .red{color:red;}
     .top{background:#CCCCCC;cursor:pointer;}
     .up{background:#FFFFCC url(up.gif) no-repeat right 5px;}
     .down{background:#FFFFCC url(down.gif) no-repeat right 5px;}
     .hov{background:#F0EFE5;}
    </style>
    </head>
    <body>
    <table cellpadding="0" id="table">
     <tr class="top"><td>点击排序</td><td >点击排序</td><td>点击排序</td><td>点击排序</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">www.corange.cn</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">asp</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">php</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">js</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>
    <script type="text/javascript"> 
     
     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){
       //var effectCol = this.getColByNum(whichCol);
       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');
    </script>
     
     
    <br><br>
    </body>
    </html>
    
  • 相关阅读:
    .net remoting 事件调用循环处理中重复返回的问题.
    MySQL5.7.29winx64解压缩版安装
    IntelliJ IDEA下SVN的配置及使用说明
    navicat12.0.26如何激活
    sql优化的几种方式
    mysql导入文件出现Data truncated for column 'xxx' at row 1的原因
    MessageFormat.format()用法
    idea提交svn不显示新建文件
    后端Long类型传到前端精度丢失的正确解决方式
    在IDEA中的cannot_resolve_method解决方法
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/1992540.html
Copyright © 2011-2022 走看看