<html>
<head>
<title>SortTable2</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script type="text/javascript">
var k=0;
function sortTable(sTableId,iCol,sDataType){
var oTable=document.getElementByIdx(sTableId);//获取表格的ID
var oTbody=oTable.tBodies[0]; //获取表格的tbody
var colDataRows=oTbody.rows; //获取tbody里的所有行的引用
var aTRs=new Array(); //定义aTRs数组用于存放tbody里的行
for(var i=0;i<colDataRows.length;i++){//依次把所有行放如aTRs数组
aTRs.push(colDataRows[i]);
}
if(oTable.sortCol==iCol){//非首次排序
aTRs.reverse();
}
else{ //首次排序
if(k%2==0){//升序
aTRs.sort(generateCompareTRs(iCol,sDataType));
}
else if(k%2==1)//降序
{
aTRs.sort(generateCompareTRs1(iCol,sDataType));
}
}
var oFragment=document.createDocumentFragment();//创建文档碎片/
for(var i=0;i<aTRs.length;i++){ //把排序过的aTRs数组成员依次添加到文档碎片
oFragment.appendChild(aTRs[i]);
}
oTbody.appendChild(oFragment); //把文档碎片添加到tbody,完成排序后的显示更新
oTable.sortCol=iCol;//把当前列号赋值给sortCol,以此来区分首次排序和非首次排序,//sortCol的默认值为-1
};
//比较函数,用于两项之间的排序
//升序
function generateCompareTRs(iCol,sDataType){
return
function compareTRs(oTR1,oTR2){
var vValue1=convert(oTR1.cells[iCol].firstChild.nodeValue,sDataType);
var vValue2=convert(oTR2.cells[iCol].firstChild.nodeValue,sDataType);
if(vValue1<vValue2){
return -1;
}
else if(vValue1>vValue2){
return 1;
}
else{
return 0;
}
};
};
//
//降序
function generateCompareTRs1(iCol,sDataType){
return
function compareTRs(oTR1,oTR2){
var vValue1=convert(oTR1.cells[iCol].firstChild.nodeValue,sDataType);
var vValue2=convert(oTR2.cells[iCol].firstChild.nodeValue,sDataType);
if(vValue1>vValue2){
return -1;
}
else if(vValue1<vValue2){
return 1;
}
else{
return 0;
}
};
};
//
//数据类型转换函数
function convert(sValue,sDataType){
switch(sDataType){
case "int":return parseInt(sValue);
case "float": return parseFloat(sValue);
case "date":return new Date(Date.parse(sValue));
default:return sValue.toString();
}
};
</script>
</head>
<body>
<form name="f1" id="f1" action="" method="post">
<table border="1" id="tblSort" sortCol="-1">
<thead>
<tr>
<th onClick="sortTable('tblSort',0);" style="cursor:pointer">Last Name</th>
<th onClick="sortTable('tblSort',1)" style="cursor:pointer">First Name</th>
<th onClick="sortTable('tblSort',2,'date')" style="cursor:pointer">Birthday</th>
<th onClick="sortTable('tblSort',3,'int')" style="cursor:pointer">Silbings</th>
</tr>
</thead>
<tbody>
<tr>
<td>Simth</td>
<td>John</td>
<td>7/12/1978</td>
<td>2</td>
</tr>
<tr>
<td>Johnson</td>
<td>Betty</td>
<td>5/12/1965</td>
<td>5</td>
</tr>
<tr>
<td>Henderson</td>
<td>Nathan</td>
<td>10/15/1977</td>
<td>3</td>
</tr>
<tr>
<td>Willianms</td>
<td>James</td>
<td>2/25/1949</td>
<td>1</td>
</tr>
<tr>
<td>Gilliam</td>
<td>Michael</td>
<td>7/8/1980</td>
<td>4</td>
</tr>
<tr>
<td>Walker</td>
<td>Matthew</td>
<td>6/18/1981</td>
<td>3</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
2.介绍一个免费版本且模块话的
(但时间排序为按月排序且忽略年份,需要修改源码)
另外介绍
1. sortabe.js 最简单的,我现在试用的就是这个,加载JS后给TABLE加上class=”sortable”就OK了,点击<th>相应栏目就可以排序~~
类似与这个js类库 还有一个说明文档,操作一样,都是添加TABLE加上class=”sortable"
(http://www.kryogenix.org/code/browser/sorttable/)
<html>
<head>
<title>Table Sort Example</title>
<script src="sorttable.js" type="text/javascript"></script>
</head>
<body>
<table class="sortable" id="mytable" cellspacing="3" cellpadding="0" width="481" border="1">
<tbody>
<tr>
<th width="165">Name</th>
<th width="101">Salary</th>
<th align="center" width="101">Extension</th>
<th align="center" width="99">Start date</th>
</tr>
<tr>
<td>Bloggs, Fred</td>
<td>$12000.00</td>
<td align="center">1353</td>
<td align="center">18/08/2003</td>
</tr>
<tr>
<td>Turvey, Kevin</td>
<td>$191200.00</td>
<td align="center">2342</td>
<td align="center">02/05/1979</td>
</tr>
<tr>
<td>Mbogo, Arnold</td>
<td>$32010.12</td>
<td align="center">2755</td>
<td align="center">09/08/1998</td>
</tr>
<tr>
<td>Shakespeare, Bill</td>
<td>$122000.00</td>
<td align="center">3211</td>
<td align="center">12/11/1961</td>
</tr>
<tr>
<td>Shakespeare, Hamnet</td>
<td>$9000</td>
<td align="center">9005</td>
<td align="center">01/01/2002</td>
</tr>
<tr>
<td>Fitz, Marvin</td>
<td>$3300</td>
<td align="center">5554</td>
<td align="center">22/05/1995</td>
</tr>
</tbody>
</table>
</body>
</html>
2. DrasticGrid AJAX应用,与MySQL结合可以实现分页、排序、编辑以及增删功能,太强大了,图里可以看到滚动条的分页效果
3. Ingrid 这个是Jquery的应用,样子我最喜欢的了,而且列宽可以拖动调节,分页及排序都有LOADING效果的
4. Tablesorter 同样是Jquery应用,样子不错,还可以设置初始排序条件
5. TableSorter Jquery应用,可以在JS调用里做出各种样式设置,作者写的很具体
6. Table Sorting Jquery应用,可以对N个TBODY分别排序,可分页,可根据条件筛选显示内容,数据量大时,比其他相同应用速度要快,这个是作者说滴,还给了个500行的例子
7. TableSort (revisited) 功能好~强大,作者的说明页面好~长,请细心查看~
表格排序有好多好多方法啊,MOO啊PROTO啊YUI啊一堆一堆的,不过我暂时还只能看看Jquery相关,已经眼花了都。。。
虽然现在试用第一种,不过还是第三个最中意,说不定换换玩~~