js 实现表格数字排序 如何用js实现表格内数字排序,点击表头可实现升序或降序排列。在网上搜了很长时间,看不懂,网上的有字符串和数字混排,太乱了。我现在只要数字排序,最好能有注释,简单点。谢谢各位了!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以试试这个table排序把type设为"int"就是按数字大小排序 array.sort(function(a1,a2){return a1>a2?1:-1;});//从小到大排序. 能力有限,不知满足要求不? <script type="text/javascript"> function intSort() { var t1 = document.getElementById("t1"); var trs = t1.getElementsByTagName("tr"); //将第一列的所有单元格值合并成数组 var sorttmp = ""; for (var i = 1; i < trs.length; i++) { sorttmp += "," + t1.rows[i].cells[0].innerText; } sorttmp = t1.rows[0].cells[0].innerText + sorttmp; var sort = sorttmp.split(","); //冒泡排序 var tmp = 0; var isOK = false; while (!isOK) { isOK = true; for (var i = 0; i < sort.length - 1; i++) { if (parseInt(sort[i]) > parseInt(sort[i + 1])) {//parseInt是关键,否则是string tmp = parseInt(sort[i]); sort[i] = parseInt(sort[i + 1]); sort[i + 1] = tmp; isOK = false; } } } for (var i = 0; i < trs.length - 1; i++) { t1.rows[i].cells[0].innerText = sort[i]; } } </script></head><body> <table id="t1" border="1"> <tr> <td>45</td> <td></td> </tr> <tr> <td>264</td> <td></td> </tr> <tr> <td>234</td> <td></td> </tr> <tr> <td>17</td> <td></td> </tr> <tr> <td>31</td> <td></td> </tr> <tr> <td>77</td> <td></td> </tr> <tr> <td>89</td> <td></td> </tr> <tr> <td>99</td> <td></td> </tr> <tr> <td>65</td> <td></td> </tr> <tr> <td>312</td> <td></td> </tr> <tr> <td> <input type="button" value="数字排序" onclick="intSort()" /></td> <td> <input type="button" value="字母排序" /></td> </tr> </table> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD><TITLE> New Document </TITLE><META NAME="Generator" CONTENT="EditPlus"><META NAME="Author" CONTENT=""><META NAME="Keywords" CONTENT=""><META NAME="Description" CONTENT=""><SCRIPT LANGUAGE="JavaScript"><!-- function orderasc(flag){ var tbody = document.getElementById("tbodyid"); var trs = tbody.children; for(var i = 0;i<trs.length-1;i++){ for(var j=0;j<trs.length-i-1;j++){ var tr1 = trs[j]; var tr2 = trs[j+1]; var td1i = parseInt(tr1.children[0].innerHTML,10); var td2i = parseInt(tr2.children[0].innerHTML,10); if(flag==0){ if(td1i > td2i){ tbody.insertBefore(tr2,tr1); } }else{ if(td1i < td2i){ tbody.insertBefore(tr2,tr1); } } } } }//--></SCRIPT></HEAD><BODY><TABLE border="1" id="tabid"><TR> <Th>编号<font onclick="orderasc(0)">升</font><font onclick="orderasc(1)">降</font></Th> <Th>名称</Th></TR><tbody id="tbodyid"> <TR> <TD>1</TD> <TD>xm</TD> </TR> <TR> <TD>10</TD> <TD>qhit</TD> </TR> <TR> <TD>5</TD> <TD>xmqhit</TD> </TR></tbody></TABLE></BODY></HTML> function sort(tableId, sortColumn,nodeType) { var table = document.getElementById(tableId); var tableBody = table.tBodies[0]; var tableRows = tableBody.rows; var rowArray = new Array(); for (var i = 0; i < tableRows.length; i++) { rowArray[i] = tableRows[i]; } if (table.sortColumn == sortColumn) { rowArray.reverse(); } else { rowArray.sort(generateCompareTR(sortColumn, nodeType)); } var tbodyFragment = document.createDocumentFragment(); for (var i = 0; i < rowArray.length; i++) { tbodyFragment.appendChild(rowArray[i]); } tableBody.appendChild(tbodyFragment); table.sortColumn = sortColumn; } function generateCompareTR(sortColumn, nodeType) { return function compareTR(trLeft, trRight) { var leftValue = convert(trLeft.cells[sortColumn].firstChild.nodeValue, nodeType); var rightValue = convert(trRight.cells[sortColumn].firstChild.nodeValue, nodeType); if (leftValue < rightValue) { return -1; } else { if (leftValue > rightValue) { return 1; } else { return 0; } } }; } function convert(value, dataType) { switch (dataType) { case "int": return parseInt(value); case "float": return parseFloat(value); case "date": return new Date(Date.parse(value)); default: return value.toString(); } }上面的是js方法 然后给表头添加onclick事件 onclick="sort('table2',2,'float')" 其中 table2为该表头所在的table id,2 为要排序的字段是table的第几个字段,float为数据类型 http://blog.csdn.net/heardy/archive/2010/12/31/6109233.aspx http://developer.yahoo.com/yui/examples/datatable/dt_basic.html 一个关于EXTJS最简单的问题 将文件从服务器上下载到本地 如何修改样式 ul li img 弱弱地问:Datagrid控件一定要在服务器端运行吗? 请教大家一个frame中document的问题(将整个页面变灰) 求教!!! 谢谢!!!! \u8bf7\u9009\u62e9 是中文 请选择 , 请问我怎么将他们转换成中文? 如何根据客户端分辨率设置图片的大小? 怎樣獲得上一頁的地址 node.js 怎么学习,它可以做哪些事情 怎么让div始终居中浏览器可视范围的中间位置 求助!当前页的脚本发生错误。
把type设为"int"就是按数字大小排序
function intSort() {
var t1 = document.getElementById("t1");
var trs = t1.getElementsByTagName("tr");
//将第一列的所有单元格值合并成数组
var sorttmp = "";
for (var i = 1; i < trs.length; i++) {
sorttmp += "," + t1.rows[i].cells[0].innerText;
}
sorttmp = t1.rows[0].cells[0].innerText + sorttmp;
var sort = sorttmp.split(",");
//冒泡排序
var tmp = 0;
var isOK = false;
while (!isOK) {
isOK = true;
for (var i = 0; i < sort.length - 1; i++) {
if (parseInt(sort[i]) > parseInt(sort[i + 1])) {//parseInt是关键,否则是string
tmp = parseInt(sort[i]);
sort[i] = parseInt(sort[i + 1]);
sort[i + 1] = tmp;
isOK = false;
}
}
}
for (var i = 0; i < trs.length - 1; i++) {
t1.rows[i].cells[0].innerText = sort[i];
}
} </script></head>
<body>
<table id="t1" border="1">
<tr>
<td>45</td>
<td></td>
</tr>
<tr>
<td>264</td>
<td></td>
</tr>
<tr>
<td>234</td>
<td></td>
</tr>
<tr>
<td>17</td>
<td></td>
</tr>
<tr>
<td>31</td>
<td></td>
</tr>
<tr>
<td>77</td>
<td></td>
</tr>
<tr>
<td>89</td>
<td></td>
</tr>
<tr>
<td>99</td>
<td></td>
</tr>
<tr>
<td>65</td>
<td></td>
</tr>
<tr>
<td>312</td>
<td></td>
</tr>
<tr>
<td>
<input type="button" value="数字排序" onclick="intSort()" /></td>
<td>
<input type="button" value="字母排序" /></td>
</tr>
</table>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<SCRIPT LANGUAGE="JavaScript">
<!--
function orderasc(flag){
var tbody = document.getElementById("tbodyid");
var trs = tbody.children;
for(var i = 0;i<trs.length-1;i++){
for(var j=0;j<trs.length-i-1;j++){
var tr1 = trs[j];
var tr2 = trs[j+1];
var td1i = parseInt(tr1.children[0].innerHTML,10);
var td2i = parseInt(tr2.children[0].innerHTML,10); if(flag==0){
if(td1i > td2i){
tbody.insertBefore(tr2,tr1);
}
}else{
if(td1i < td2i){
tbody.insertBefore(tr2,tr1);
}
}
}
}
}//-->
</SCRIPT>
</HEAD><BODY>
<TABLE border="1" id="tabid">
<TR>
<Th>编号<font onclick="orderasc(0)">升</font><font onclick="orderasc(1)">降</font></Th>
<Th>名称</Th>
</TR>
<tbody id="tbodyid">
<TR>
<TD>1</TD>
<TD>xm</TD>
</TR>
<TR>
<TD>10</TD>
<TD>qhit</TD>
</TR>
<TR>
<TD>5</TD>
<TD>xmqhit</TD>
</TR>
</tbody>
</TABLE>
</BODY>
</HTML>
var table = document.getElementById(tableId);
var tableBody = table.tBodies[0];
var tableRows = tableBody.rows;
var rowArray = new Array();
for (var i = 0; i < tableRows.length; i++) {
rowArray[i] = tableRows[i];
}
if (table.sortColumn == sortColumn) {
rowArray.reverse();
} else {
rowArray.sort(generateCompareTR(sortColumn, nodeType));
}
var tbodyFragment = document.createDocumentFragment();
for (var i = 0; i < rowArray.length; i++) {
tbodyFragment.appendChild(rowArray[i]);
}
tableBody.appendChild(tbodyFragment);
table.sortColumn = sortColumn;
}
function generateCompareTR(sortColumn, nodeType) {
return function compareTR(trLeft, trRight) {
var leftValue = convert(trLeft.cells[sortColumn].firstChild.nodeValue, nodeType);
var rightValue = convert(trRight.cells[sortColumn].firstChild.nodeValue, nodeType);
if (leftValue < rightValue) {
return -1;
} else {
if (leftValue > rightValue) {
return 1;
} else {
return 0;
}
}
};
}
function convert(value, dataType) {
switch (dataType) {
case "int":
return parseInt(value);
case "float":
return parseFloat(value);
case "date":
return new Date(Date.parse(value));
default:
return value.toString();
}
}上面的是js方法 然后给表头添加onclick事件 onclick="sort('table2',2,'float')" 其中 table2为该表头所在的table id,2 为要排序的字段是table的第几个字段,float为数据类型