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-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{width: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>

时间: 2024-10-30 19:02:38

JavaScript实现表格排序方法_javascript技巧的相关文章

javascript清空table表格的方法_javascript技巧

本文实例讲述了javascript清空table表格的方法.分享给大家供大家参考.具体如下: 1. 通常方法 循环table的rows,然后一个一个删除. 这个方法是通常的方法,可行,但是效率不好. 2. 另一个方法 var artTable = document.getElementById("artical_table"); console.debug(artTable.getElementsByTagName("thead")[0]); var artBody

javascript实现可全选、反选及删除表格的方法_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&qu

JavaScript实现将xml转换成html table表格的方法_javascript技巧

本文实例讲述了JavaScript实现将xml转换成html table表格的方法.分享给大家供大家参考.具体如下: function ConvertToTable(targetNode) { // if the targetNode is xmlNode this line must be removed // i couldnt find a way to parse xml string to xml node // so i parse xml string to xml documen

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 m

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技巧

在上篇文章给大家介绍了JavaScript sort数组排序方法和自我实现排序方法小结,用自己的方法实现了数字数组的排序. 当然,实际运用中,我还是会使用sort方法更加方便.但是,我上一篇博文,仅仅是实现了数字排序,而srot方法默认可是能给字母实现排序的哦!而我的代码只能排序数字,看起来还是弱弱的. 所以,我得加上能排字母甚至中文的排序方法. 实现代码 $(function(){ var arr = ["Jack","Book","Fung"

JS控制网页动态生成任意行列数表格的方法_javascript技巧

本文实例讲述了JS控制网页动态生成任意行列数表格的方法.分享给大家供大家参考.具体分析如下: 这是一个非常简单使用的JS在线生成表格的代码效果 通过JS功能代码,直接输入行数和列数就可以自动生成你需要的表格 当然你也可以扩展JS代码实现生成文字的各种形式 复制代码 代码如下: <html> <head> <title>Js动态生成表格</title> <style type="text/css"> table{font-siz

不到30行JS代码实现Excel表格的方法_javascript技巧

本文实例讲述了不到30行JS代码实现Excel表格的方法,可见jQuery并非不可替代.分享给大家供大家参考.具体分析如下: 某国外程序员展示了一个由原生JS写成不依赖第三方库的,Excel表格应用,有以下特性: ① 由不足30行的原生JavaScript代码实现 ② 不依赖第三方库 ③ Excel风格的语义分析 (公式以 "=" 开头) ④ 支持任意表达式 (=A1+B2*C3) ⑤ 防止循环引用 ⑥ 基于localStorage的自动本地持久化存储 效果展示如下图所示: 代码分析:

浅谈html转义及防止javascript注入攻击的方法_javascript技巧

有的时候页面中会有一个输入框,用户输入内容后会显示在页面中,类似于网页聊天应用.如果用户输入了一段js脚本,比例:<script>alert('test');</script>,页面会弹出一个对话框,或者输入的脚本中有改变页面js变量的代码则会时程序异常或者达到跳过某种验证的目的.那如何防止这种恶意的js脚本攻击呢?通过html转义能解决这个问题. 一:什么是html转义? html转义是将特殊字符或html标签转换为与之对应的字符.如:< 会转义为 <> 或转义