排序代码。在示例下500条数据时,效率提高50%的得分。(代码不必拘限于示例代码)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>JK:支持民族工业,尽量少买X货</title>
<script language="javascript" srccccc="CommonJS_RowSort.js">
var rowSortImg=document.createElement("img");
function rowSortFun(tdObj){
var d1=new Date();
var currentColumnIndex=tdObj.cellIndex;
if(rowSortImg.parentNode != tdObj){
tdObj.appendChild(rowSortImg);
rowSortImg.src="up.gif";
}
else if (rowSortImg.src.indexOf("down.gif")>-1){
rowSortImg.src="up.gif";
}
else{
rowSortImg.src="down.gif";
}
var currentTbody=tdObj.parentNode.parentNode;
var rowsArray=new Array();
for( var i=1;i<currentTbody.rows.length;i++){
rowsArray[i-1]=currentTbody.rows[i].cells[currentColumnIndex];
}
rowsArray.sort(getSortFun(tdObj));
for(var i=0;i<rowsArray.length;i++){
currentTbody.appendChild(rowsArray[i].parentNode);
}
alert("行数"+rowsArray.length+";所花毫秒数"+(new Date()-d1));
}
function getSortFun(tdObj){
var sortIsAsc=(rowSortImg.src.indexOf("up.gif")>-1);
if("Number"==tdObj.columnContentType && sortIsAsc){
return function (trObj1,trObj2) {return trObj1.innerHTML*1-trObj2.innerHTML*1;}
}
else if("Number"==tdObj.columnContentType && !sortIsAsc){
return function (trObj1,trObj2) { return trObj2.innerHTML*1-trObj1.innerHTML*1;}
}
else if(sortIsAsc){
return function (trObj1,trObj2) { return (trObj1.innerHTML.toUpperCase() > trObj2.innerHTML.toUpperCase())-0.5;}
}
else {
return function (trObj1,trObj2) { return (trObj1.innerHTML.toUpperCase() < trObj2.innerHTML.toUpperCase())-0.5;}
}
}
</script>
<style>
.headerTr{background-color:#cccccc;}
</style>
</head>
<body>
<div style="font-size:10pt;">
注1:用法:需要排序的字段头里:<td columnContentType="Text" onclick="rowSortFun(this);"> 。 <br/>
注2:鉴于很多提出要求前台排序的人,其实并不是真的需要前台排序,所以强列建议慎用前台排序。 <br/>
<br/>
<br/>
注:本页面仅在IE6/FireFox1.5下测试过。其它浏览器或其它版本未经测试。<br/>
注-----:JK:<a href="mailTo:jk_10000@yahoo.com.cn?subject=RowSortSample">JK_10000@yahoo.com.cn</a><br/>
<hr/>
</div>
<table border="1" width="100%" >
<tr class="headerTr">
<td columnContentType="Text" onclick="rowSortFun(this);" > 字符串或其它</td>
<td columnContentType="Number" onclick="rowSortFun(this);" >数字</td>
<td columnContentType="Text" onclick="rowSortFun(this);" >字符串</td>
<td columnContentType="Number" onclick="rowSortFun(this);" >数字</td>
<td >输入框(不需要排序)</td>
</tr>
<tr>
<td>a</td>
<td>2</td>
<td>j</td>
<td>1</td>
<td><input value="1"></td>
</tr>
<tr>
<td>b</td>
<td>1</td>
<td>k</td>
<td>2</td>
<td><input value="连山"></td>
</tr>
<tr>
<td>c</td>
<td>1</td>
<td>j</td>
<td>3</td>
<td><input value="归藏"></td>
</tr>
<tr>
<td>d</td>
<td>0</td>
<td>i</td>
<td>4</td>
<td><input value="周易"></td>
</tr>
<tr>
<td>e</td>
<td>2</td>
<td>m</td>
<td>5</td>
<td><input value="仁者乐山智者乐水"></td>
</tr>
</table>
</body>
</html>