利用JavaScript对表格数据进行排序

  • 这是一个利用JavaScript结合CSS实现的对表格进行排序的代码,点击表头会自动排序,至于由哪种规则排序这个由你决定,表格排序现在用的也非常多。此实例实现的是降序、升序排列。


点击(此处)折叠或打开

  1. <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
  2. <html xmlns=\"http://www.w3.org/1999/xhtml\">
  3. <head>
  4. <meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\" />
  5. <title>石家庄标准件</title>
  6. <style>
  7.  *{font-family:Arial, Helvetica, sans-serif;font-size:14px;border:none;}
  8.  body{text-align:center;}
  9.  table{margin:100px auto;}
  10.  td{width:110px;height:25px;text-align:center;line-height:25px;border:1px solid silver;}
  11.  .red{color:red;}
  12.  .top{background:#EEE;cursor:pointer;}
  13.  .up{background:#FFFFCC;}
  14.  .down{background:#FFFFCC;}
  15.  .hov{background:#F0EFE5;}
  16. </style>
  17. </head>
  18. <body>
  19. <table cellpadding=\"0\" id=\"table\">
  20.  <tr class=\"top\"><td>kick me</td><td >kick me</td><td>kick me</td><td>kick me</td></tr>
  21.  <tr>
  22.    <td><span id=\"bfn_la_bac.usa\">15.43</span></td>
  23.    <td class=\"red\">700</td>
  24.    <td>1.220</td>
  25.    <td class=\"red\"></td>
  26.  </tr>
  27.     <tr><td><span id=\"bfn_la_c.usa\">7.05</span></td>
  28.   <td class=\"red\">4</td>
  29.   <td>3,000</td>
  30.   <td class=\"red\"></td>
  31.     </tr>
  32.     <tr><td><span id=\"bfn_la_jpm.usa\">30.62</span></td>
  33.   <td class=\"red\">30</td>
  34.   <td>2,558,800</td>
  35.   <td class=\"red\"></td>
  36.     </tr>
  37.     <tr>
  38.       <td><span id=\"bfn_la_axp.usa\">22.30</span></td>
  39.   <td class=\"red\">5</td><td>6</td>
  40.   <td class=\"red\"></td>
  41.     </tr>
  42.     <tr><td><span id=\"bfn_la_mrk.usa\">26.31</span></td>
  43.   <td class=\"red\">0.6</td><td>5</td>
  44.   <td class=\"red\">-</td>
  45.     </tr>
  46.     <tr><td><span id=\"bfn_la_pg.usa\">63.16</span></td>
  47.   <td class=\"red\">7</td><td>4</td>
  48.   <td class=\"red\"></td>
  49.     </tr>
  50. </table>
  51. <script type=\"text/javascript\">
  52.  
  53.  var tableSort = function(){
  54.   this.initialize.apply(this,arguments);
  55.  }
  56.  
  57.  tableSort.prototype = {
  58.  
  59.   initialize : function(tableId,clickRow,startRow,endRow,classUp,classDown,selectClass){
  60.    this.Table = document.getElementById(tableId);
  61.    this.rows = this.Table.rows;//所有行
  62.    this.Tags = this.rows[clickRow-1].cells;//标签td
  63.    this.up = classUp;
  64.    this.down = classDown;
  65.    this.startRow = startRow;
  66.    this.selectClass = selectClass;
  67.    this.endRow = (endRow == 999? this.rows.length : endRow);
  68.    this.T2Arr = this._td2Array();//受影响的td二维数组
  69.    this.setShow();
  70.   },
  71.   //标签切换
  72.   setShow:function(){
  73.    var defaultClass = this.Tags[0].className;
  74.    for(var Tag ,i=0;Tag = this.Tags[i];i++){
  75.     Tag.index = i;
  76.     addEventListener(Tag ,\'click\', Bind(Tag,statu));
  77.    }
  78.    var _this =this;
  79.    var turn = 0;
  80.    function statu(){
  81.     for(var i=0;i<_this.Tags.length;i++){
  82.      _this.Tags[i].className = defaultClass;
  83.     }
  84.     if(turn==0){
  85.      addClass(this,_this.down)
  86.      _this.startArray(0,this.index);
  87.      turn=1;
  88.     }else{
  89.      addClass(this,_this.up)
  90.      _this.startArray(1,this.index);
  91.      turn=0;
  92.     }
  93.    }
  94.   },
  95.   //选中列样式
  96.   colClassSet:function(num,cla){
  97.    //得到关联到的td
  98.    for(var i= (this.startRow-1);i<(this.endRow);i++){
  99.     for(var n=0;n<this.rows[i].cells.length;n++){
  100.      removeClass(this.rows[i].cells[n],cla);
  101.     }
  102.     addClass(this.rows[i].cells[num],cla);
  103.    }
  104.   },
  105.   //开始排序 num 根据第几列排序 aord 逆序还是顺序
  106.   startArray:function(aord,num){
  107.    var afterSort = this.sortMethod(this.T2Arr,aord,num);//排序后的二维数组传到排序方法中去
  108.    this.array2Td(num,afterSort);//输出
  109.   },
  110.   //将受影响的行和列转换成二维数组
  111.   _td2Array:function(){
  112.    var arr=[];
  113.    for(var i=(this.startRow-1),l=0;i<(this.endRow);i++,l++){
  114.     arr[l]=[];
  115.     for(var n=0;n<this.rows[i].cells.length;n++){
  116.      arr[l].push(this.rows[i].cells[n].innerHTML);
  117.     }
  118.    }
  119.    return arr;
  120.   },
  121.   //根据排序后的二维数组来输出相应的行和列的 innerHTML
  122.   array2Td:function(num,arr){
  123.    this.colClassSet(num,this.selectClass);
  124.    for(var i= (this.startRow-1),l=0;i<(this.endRow);i++,l++){
  125.     for(var n=0;n<this.Tags.length;n++){
  126.      this.rows[i].cells[n].innerHTML = arr[l][n];
  127.     }
  128.    }
  129.   },
  130.   //传进来一个二维数组,根据二维数组的子项中的w项排序,再返回排序后的二维数组
  131.   sortMethod:function(arr,aord,w){
  132.    //var effectCol = this.getColByNum(whichCol);
  133.    arr.sort(function(a,b){
  134.     x = killHTML(a[w]);
  135.     y = killHTML(b[w]);
  136.     x = x.replace(/,/g,\'\');
  137.     y = y.replace(/,/g,\'\');
  138.     switch (isNaN(x)){
  139.      case false:
  140.      return Number(x) - Number(y);
  141.      break;
  142.      case true:
  143.      return x.localeCompare(y);
  144.      break;
  145.     }
  146.    });
  147.    arr = aord==0?arr:arr.reverse();
  148.    return arr;
  149.   }
  150.  }

  151.  function addEventListener(o,type,fn){
  152.   if(o.attachEvent){o.attachEvent(\'on\'+type,fn)}
  153.   else if(o.addEventListener){o.addEventListener(type,fn,false)}
  154.   else{o[\'on\'+type] = fn;}
  155.  }
  156.  
  157.  function hasClass(element, className) {
  158.   var reg = new RegExp(\'(\\\\s|^)\'+className+\'(\\\\s|$)\');
  159.   return element.className.match(reg);
  160.  }
  161.   
  162.  function addClass(element, className) {
  163.   if (!this.hasClass(element, className))
  164.   {
  165.    element.className += \" \"+className;
  166.   }
  167.  }
  168.   
  169.  function removeClass(element, className) {
  170.   if (hasClass(element, className)) {
  171.    var reg = new RegExp(\'(\\\\s|^)\'+className+\'(\\\\s|$)\');
  172.    element.className = element.className.replace(reg,\' \');
  173.   }
  174.  }
  175.  
  176.  var Bind = function(object, fun) {
  177.   return function() {
  178.    return fun.apply(object, arguments);
  179.   }
  180.  }
  181.  //去掉所有的html标记
  182.  function killHTML(str){
  183.   return str.replace(/<[^>]+>/g,\"\");
  184.  }
  185.  //------------------------------------------------
  186.  //tableid 第几行是标签行,从第几行开始排序,第几行结束排序(999表示最后) 升序标签样式,降序标签样式 选中列样式
  187.  //注意标签行的class应该是一致的
  188.  var ex1 = new tableSort(\'table\',1,2,999,\'up\',\'down\',\'hov\');
  189. </script>
  190. </body>
  191. </html>


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29737856/viewspace-1242190/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29737856/viewspace-1242190/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值