来源: http://www.zyhowe.com/index/topicDetail.aspx?type=200100&topicid=288
<html>
<head>
<title>测试 </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script type="text/javascript" language="javascript">
var TrArray=new Array();
function addSortTableClient(tableid,rowheadnum){
var tableobj = document.getElementById(tableid);
if(!tableobj) return;
//1.1 先补充colspan
for(var i=0;i <rowheadnum;i++){
var r=tableobj.rows[i];
for(var j=r.cells.length-1;j>=0;j--){
var c=r.cells[j];
if(c.colSpan>1){
for(k=1;k <=c.colSpan-1;k++){
var newtd=tableobj.rows[i].insertCell(j+1);
//newtd.innerHTML=i+"_"+j+"_"+(j+k);
newtd.style.display="none";
}
// c.colSpan=1;
}
}
}
//1.2 再补充rowspan
for(var i=rowheadnum-1;i>=0;i--){
var r=tableobj.rows[i];
for(var j=r.cells.length-1;j>=0;j--){
var c=r.cells[j];
if(c.rowSpan>1){
for(k=1;k <=c.rowSpan-1;k++){
var newtd=tableobj.rows[i+k].insertCell(j);
newtd.style.display="none";
}
//c.rowSpan=1;
}
}
}
//2.复制所有TBODY内所有TR到数组
for(var i=0;i <tableobj.rows.length-rowheadnum;i++){
TrArray[i]=tableobj.rows[i+rowheadnum];
}
//3.添加列头排序
for(var i=0;i <rowheadnum&&i <tableobj.rows.length;i++){
var r = tableobj.rows[i];
for(var j=0;j <r.cells.length;j++){
var c = r.cells[j];
var s = c.innerHTML;
if(c.type=="")c.type="Number";
c.innerHTML = " <a href='#' οnclick='javascript:sortTableClient(/""+tableid+"/",/""+rowheadnum+"/",/""+i+"/",/""+j+"/",/""+c.type+"/",/"asc/");'>"+s+" </a>";
}
}
}
var oldcolIndex=-1;
var oldrowIndex=-1;
function sortTableClient(tableid,rowheadnum,rowIndex,colIndex,typename,sortby){
var tableobj = document.getElementById(tableid);
if(!tableobj) return;
//alert(rowIndex+","+colIndex);
function CaseInsensitiveString(s){//转换为大写
return String(s).toUpperCase();
}
function parseDate(s){//转换为毫秒的时间
return Date.parse(s.replace(//-/g,"/"));
}
function parseNumber(s){
return parseFloat(s.replace(/,/,""));
}
var fTypeCast=String;//未指定的时候的方式
switch(typename){
case "Date"://时间的处理方式
fTypeCast=parseDate;
break;
case "CaseInsensitiveString"://大小写不区分
fTypeCast=CaseInsensitiveString;
break;
case "Number"://数字的处理方式
fTypeCast=parseNumber;
break;
default:
fTypeCast=String;
break;
}
TrArray.sort(
function (a,b){
if(fTypeCast(a.cells[colIndex].innerText) <fTypeCast(b.cells[colIndex].innerText))
return (sortby=="asc")?-1:1;
if(fTypeCast(a.cells[colIndex].innerText)>fTypeCast(b.cells[colIndex].innerText))
return (sortby=="asc")?1:-1;
return 0;
}
);
var c = tableobj.rows[rowIndex].cells[colIndex];
var s = c.innerHTML;
if(sortby=="desc"){
s=s.replace(/desc/gi,"asc");
if(s.indexOf("↑")>=0||s.indexOf("↓")>=0){
s=s.replace(/↓/gi,"↑");
}else{
s=s.replace(/ <//A>/gi,"↑ </a>");
}
}else if(sortby=="asc"){
s=s.replace(/asc/gi,"desc");
if(s.indexOf("↑")>=0||s.indexOf("↓")>=0){
s=s.replace(/↑/gi,"↓");
}else{
s=s.replace(/ <//A>/gi,"↓ </a>");
}
}
c.innerHTML =s;
if(rowIndex!=oldrowIndex||colIndex!=oldcolIndex){
if(oldcolIndex!=-1&&oldrowIndex!=-1){
var c1 = tableobj.rows[oldrowIndex].cells[oldcolIndex];
var s1 = c1.innerHTML;
s1=s1.replace(/( <img)[^ <]*/gi,"");
c1.innerHTML=s1;
}
oldrowIndex=rowIndex;
oldcolIndex=colIndex;
}
var k=0;
for(var i=rowheadnum;i <tableobj.rows.length;i++){
tableobj.rows[i].swapNode(TrArray[k++]);
}
}
</script>
<table id='SortTable' width=800 border=1>
<tr>
<td nowrap rowspan='2' colspan='1' type='Number' >时间 </td>
<td nowrap rowspan='1' colspan='2' type='Number' >固定资产投资额 </td>
<td nowrap rowspan='1' colspan='2' type='Number' >GDP </td>
</tr>
<tr>
<td nowrap rowspan='1' colspan='1' type='Number' >累计值(亿元) </td>
<td nowrap rowspan='1' colspan='1' type='Number' >累计增长(%) </td>
<td nowrap rowspan='1' colspan='1' type='Number' >累计值(亿元) </td>
<td nowrap rowspan='1' colspan='1' type='Number' >累计增长(%) </td>
</tr>
<tr>
<td nowrap>200812 </td>
<td align=right nowrap>148,167.00 </td>
<td align=right nowrap>26.10 </td>
<td align=right nowrap>300,670.00 </td>
<td align=right nowrap>9.00 </td>
</tr>
<tr>
<td nowrap>200809 </td>
<td align=right nowrap>99,870.71 </td>
<td align=right nowrap>27.60 </td>
<td align=right nowrap>201,631.00 </td>
<td align=right nowrap>9.90 </td>
</tr>
<tr >
<td nowrap>200806 </td>
<td align=right nowrap>58,435.98 </td>
<td align=right nowrap>26.80 </td>
<td align=right nowrap>130,619.00 </td>
<td align=right nowrap>10.40 </td>
</tr>
<tr >
<td nowrap>200803 </td>
<td align=right nowrap>18,316.94 </td>
<td align=right nowrap>25.90 </td>
<td align=right nowrap>61,491.00 </td>
<td align=right nowrap>10.60 </td>
</tr>
<tr >
<td nowrap>200712 </td>
<td align=right nowrap>117,413.91 </td>
<td align=right nowrap>25.80 </td>
<td align=right nowrap>246,619.00 </td>
<td align=right nowrap>11.40 </td>
</tr>
<tr >
<td nowrap>200709 </td>
<td align=right nowrap>78,246.78 </td>
<td align=right nowrap>26.40 </td>
<td align=right nowrap>166,043.00 </td>
<td align=right nowrap>11.50 </td>
</tr>
<tr >
<td nowrap>200706 </td>
<td align=right nowrap>46,077.82 </td>
<td align=right nowrap>26.70 </td>
<td align=right nowrap>106,768.00 </td>
<td align=right nowrap>11.50 </td>
</tr> <tr >
<td nowrap>200703 </td>
<td align=right nowrap>14,543.61 </td>
<td align=right nowrap>25.30 </td>
<td align=right nowrap>50,287.00 </td>
<td align=right nowrap>11.10 </td>
</tr> <tr >
<td nowrap>200612 </td>
<td align=right nowrap>93,472.36 </td>
<td align=right nowrap>24.50 </td>
<td align=right nowrap>210,871.00 </td>
<td align=right nowrap>11.10 </td>
</tr> <tr >
<td nowrap>200609 </td>
<td align=right nowrap>61,880.12 </td>
<td align=right nowrap>28.20 </td>
<td align=right nowrap>142,898.30 </td>
<td align=right nowrap>10.80 </td>
</tr> <tr >
<td nowrap>200606 </td>
<td align=right nowrap>36,368.35 </td>
<td align=right nowrap>31.30 </td>
<td align=right nowrap>92,369.40 </td>
<td align=right nowrap>11.00 </td>
</tr>
<tr >
<td nowrap>200603 </td>
<td align=right nowrap>11,608.40 </td>
<td align=right nowrap>29.80 </td>
<td align=right nowrap>43,851.00 </td>
<td align=right nowrap>10.40 </td>
</tr> <tr >
<td nowrap>200512 </td>
<td align=right nowrap>75,096.48 </td>
<td align=right nowrap>27.20 </td>
<td align=right nowrap>183,867.90 </td>
<td align=right nowrap>10.40 </td>
</tr> <tr >
<td nowrap>200509 </td>
<td align=right nowrap>48,741.49 </td>
<td align=right nowrap>27.72 </td>
<td align=right nowrap>125,984.90 </td>
<td align=right nowrap>10.40 </td>
</tr> <tr >
<td nowrap>200506 </td>
<td align=right nowrap>27,967.00 </td>
<td align=right nowrap>27.10 </td>
<td align=right nowrap>81,412.80 </td>
<td align=right nowrap>10.50 </td>
</tr> <tr >
<td nowrap>200503 </td>
<td align=right nowrap>9,036.68 </td>
<td align=right nowrap>25.30 </td>
<td align=right nowrap>38,848.60 </td>
<td align=right nowrap>10.50 </td>
</tr> <tr >
<td nowrap>200412 </td>
<td align=right nowrap>58,620.28 </td>
<td align=right nowrap>27.60 </td>
<td align=right nowrap>136,875.90 </td>
<td align=right nowrap>9.50 </td>
</tr> <tr >
<td nowrap>200409 </td>
<td align=right nowrap>38,028.34 </td>
<td align=right nowrap>29.90 </td>
<td align=right nowrap>93,495.20 </td>
<td align=right nowrap>9.50 </td>
</tr>
<tr >
<td nowrap>200406 </td>
<td align=right nowrap>21,843.97 </td>
<td align=right nowrap>31.00 </td>
<td align=right nowrap>59,042.70 </td>
<td align=right nowrap>9.70 </td>
</tr> <tr >
<td nowrap>200403 </td>
<td align=right nowrap>7,058.48 </td>
<td align=right nowrap>47.78 </td>
<td align=right nowrap>27,262.00 </td>
<td align=right nowrap>9.80 </td>
</tr>
</table>
<script language="javascript">
addSortTableClient("SortTable",2);
</script>
</body>
</html>