js table 排序 建个hash表把数据放进去,然后按你要求的顺序输出。你问得太笼统我只能这样答了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JS 做的表格数据排序:http://download.csdn.net/source/595031看看别人怎么写的 http://ozone.javaeye.com/blog/103272这里也有说明 一般是按数据类型进行区别比较,或者统一按数字和charCode进行比较,倒排可以reverse. function GoSort() { //声明数据变量ary var ary = new Array(); //循环table1 其中的i=1为table的第二行,因为第一行为标题,length-1因为最后一行为总计 这两行不在排序之内 for(var i=1;i <table1.rows.length-1;i++) { //这里是给ary数组赋值,但我不明白的是,我的table有三列,为什么这里只用了一个得到那个要排序的金额还有table1.rows[i]这个有什么用 ary[i] = new Array(parseInt(table1.rows[i].cells[1].childNodes[1].innerHTML),table1.rows[i]); /***********************************是按金额排序,这个作为标准, 把当前的tr放在数据中,好处是在moveRow 的时候通过这个tr可取它变化后的rowIndex就是行的索引,如果是传当前的rowIndex, 当作一次moveRow后就全部变化了******************************************/ } //调用sort这里面完全看不懂 ary = ary.sort(DoSort); /*********************这里不用返回也可以,ary.sort( DoSort)就可,对这个数组排序, DoSort是一个自定义的函数,用来制定排序标准********************************/ //循环ary数组 for(var i=0;i <ary.length-1;i++) { //这里不知道干什么 table1.moveRow(ary[i][1].rowIndex,i+1); /********************************** ary[i][1]是保存的tr. tr的rowIndex是源行,i+1 是移动的目标的行数. 此时数据是按金额大小排序了的.这个tr位置将移到 i+1 即从2行开始(头行不考虑) *************************************/ } } function DoSort(e1,e2) { //调用sort这里面完全看不懂 e1,e2是干什么用的 return e2[0] -e1[0]; /******************************e1就是第前数组的前一个对象,e2是另一个,因为这个数据中存的对象也是个数组,我们是按 这个数的第一个元素是金额,按金额大小排序. } 偷ajk兄的代码,嘿嘿<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:[email protected]?subject=RowSortSample" >[email protected] </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 > http://www.kryogenix.org/code/browser/sorttable/ <HTML> <style type="text/css">th {background-color: #999999; cursor:pointer}td {background-color: #999900; text-align:center}</style><SCRIPT LANGUAGE="javaScript">function sortCells(i) {var column=document.all.ot1.rows(1).cells.length;var row=document.all.ot1.rows.length;var temp;//定义二维数组,因为JAVASCRIPT不支持直接定义二维数组var Ar=new Array(row-1);for(x=0;x<row-1;x++){ Ar[x]=new Array(column);}//初始化二维数组for(x=1;x<row;x++){ for(y=0;y<column;y++){ Ar[x-1][y]=document.all.ot1.rows(x).cells(y).innerText; }}//数组排序--这个可以汉字排序Ar.sort(function(a,b){return a[i].localeCompare(b[i])});//数组排序--这个非汉字排序/*for(x=0;x<row-1;x++){ for(y=1;y<row-1;y++){ temp=Ar[y-1]; if(Ar[y-1][i]>Ar[y][i]) { Ar[y-1]=Ar[y]; Ar[y]=temp; } }}*///输出排序好的数组for(x=1;x<row;x++){ for(y=0;y<column;y++){ document.all.ot1.rows(x).cells(y).innerText=Ar[x-1][y]; }}}</SCRIPT><BODY><TABLE id="ot1" align="center" width="40%" Height="40%" id=oTable border=1><TR> <TH onclick="sortCells(0)">列1</TH> <TH onclick="sortCells(1)">列2</TH> <TH onclick="sortCells(2)">列3</TH> <TH onclick="sortCells(3)">列4</TH></TR><TR> <TD>1</TD><TD>a</TD><TD>1</TD><TD>啊</TD></TR><TR> <TD>3</TD><TD>b</TD><TD>4</TD><TD>不</TD></TR><TR> <TD>5</TD><TD>c</TD><TD>4</TD><TD>才</TD></TR><TR> <TD>4</TD><TD>d</TD><TD>7</TD><TD>的</TD></TR><TR> <TD>8</TD><TD>e</TD><TD>9</TD><TD>饿</TD></TR><TR> <TD>2</TD><TD>f</TD><TD>3</TD><TD>发</TD></TR><TR> <TD>6</TD><TD>g</TD><TD>5</TD><TD>个</TD></TR><TR> <TD>5</TD><TD>h</TD><TD>2</TD><TD>和</TD></TR></TABLE></BODY></HTML> fckeditor window.top.opener为空或不是对象 在extjs里如何对汉字进行显式编码 如何嵌入JS代码进行网站分析 一幅图片移动后 怎么利用js获取图片的坐标 添加Option后,不能立即选中的问题 ie中appendChild加入的结点中如果有select元素的问题?? 关于CSS+Javascript 做菜单的问题? target 和 srcElement js怎么写一个对table的选择记录行的操作? 急!!! 请大家帮我解释段代码! 显示1图片5秒钟,5秒钟后图片消失,显示页面其它内容如何做,谢谢? 网页原代码给出了! 在线等
看看别人怎么写的
<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:[email protected]?subject=RowSortSample" >[email protected] </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 >
<HTML>
<style type="text/css">
th {background-color: #999999;
cursor:pointer}
td {background-color: #999900;
text-align:center}
</style><SCRIPT LANGUAGE="javaScript">
function sortCells(i) {
var column=document.all.ot1.rows(1).cells.length;
var row=document.all.ot1.rows.length;
var temp;
//定义二维数组,因为JAVASCRIPT不支持直接定义二维数组
var Ar=new Array(row-1);
for(x=0;x<row-1;x++){
Ar[x]=new Array(column);
}
//初始化二维数组
for(x=1;x<row;x++){
for(y=0;y<column;y++){
Ar[x-1][y]=document.all.ot1.rows(x).cells(y).innerText;
}
}
//数组排序--这个可以汉字排序
Ar.sort(function(a,b){return a[i].localeCompare(b[i])});
//数组排序--这个非汉字排序
/*for(x=0;x<row-1;x++){
for(y=1;y<row-1;y++){
temp=Ar[y-1];
if(Ar[y-1][i]>Ar[y][i])
{
Ar[y-1]=Ar[y];
Ar[y]=temp;
}
}
}*///输出排序好的数组
for(x=1;x<row;x++){
for(y=0;y<column;y++){
document.all.ot1.rows(x).cells(y).innerText=Ar[x-1][y];
}
}
}</SCRIPT>
<BODY>
<TABLE id="ot1" align="center" width="40%" Height="40%" id=oTable border=1>
<TR>
<TH onclick="sortCells(0)">列1</TH>
<TH onclick="sortCells(1)">列2</TH>
<TH onclick="sortCells(2)">列3</TH>
<TH onclick="sortCells(3)">列4</TH>
</TR>
<TR>
<TD>1</TD><TD>a</TD><TD>1</TD><TD>啊</TD>
</TR>
<TR>
<TD>3</TD><TD>b</TD><TD>4</TD><TD>不</TD>
</TR>
<TR>
<TD>5</TD><TD>c</TD><TD>4</TD><TD>才</TD>
</TR>
<TR>
<TD>4</TD><TD>d</TD><TD>7</TD><TD>的</TD>
</TR>
<TR>
<TD>8</TD><TD>e</TD><TD>9</TD><TD>饿</TD>
</TR>
<TR>
<TD>2</TD><TD>f</TD><TD>3</TD><TD>发</TD>
</TR>
<TR>
<TD>6</TD><TD>g</TD><TD>5</TD><TD>个</TD>
</TR>
<TR>
<TD>5</TD><TD>h</TD><TD>2</TD><TD>和</TD>
</TR>
</TABLE>
</BODY>
</HTML>