js 对table排序

<table id="tblSort">
<thead>
<tr>
<th οnclick="sortTable('tblSort', 0)" style="cursor:pointer">类型</th>
<th οnclick="sortTable('tblSort', 1)" style="cursor:pointer">文件名</th>
<th οnclick="sortTable('tblSort', 2, 'date')" style="cursor:pointer">创建日期</th>
<th οnclick="sortTable('tblSort', 3, 'int')" style="cursor:pointer">文件大小</th>
</tr>
</thead>
<tbody>
<tr>
<td value="doc"><img src="images/wordIcon.gif"</td>
<td>Word 文档</td>
<td>7/12/2008</td>
<td>3</td>
</tr>
<tr>
<td value="xls"><img src="images/xlsIcon.gif"</td>
<td>Excel 文档</td>
<td>5/11/2008</td>
<td>6</td>
</tr>
<tr>
<td value="pdf"><img src="images/pdfIcon.gif"</td>
<td>PDF 文档</td>
<td>7/5/2007</td>
<td>8</td>
</tr>
</tbody>
</table>
<script>
function sortTable(sTableId, iCol, sDataType)
{
var oTable = document.getElementById(sTableId);//获得表
var oTBody = oTable.tBodies[0];//获得放数据的body,因为该表格只有一个tbody,所以直接用[0]
var colRows = oTBody.rows;//获得tbody里所有的tr
var aTRs = new Array();//声明一个数组
for(var i = 0; i < colRows .length; i++)
{
aTRs[i] = colRows[i];//将tr依次放入数组中;
}
if(oTable.sortCol == iCol)
{
aTRs.reverse();//如果当前要排的列和上次排的列是一样的,就直接逆向排序;也就是说连着对一列点两次,就会进行升序,降序的转换.
}
else
{
aTRs.sort(getSortFunction(iCol, sDataType));//排序,并且传入一个获得到的比较函数;
}

var oFragement = document.createDocumentFragment();//创建文档碎片,用来存放排好的tr
for(var i = 0; i < aTRs.length; i++)
{
oFragement.appendChild(aTRs[i]);//将tr绑定到碎片上.
}
oTBody.appendChild(oFragement);//将碎片绑定在表格上
oTable.sortCol = iCol;//记住当前列,这个可以用来判断是对数组进行反向排序还是重新按列排;
}
function getSortFunction(iCol, sDataType)
{
return function compareTRs(oTR1, oTR2){
var vValue1, vValue2;
if(oTR1.cells[iCol].getAttribute("value"))
{
vValue1 = convert(oTR1.cells[iCol].getAttribute("value"), sDataType);
vValue2 = convert(oTR2.cells[iCol].getAttribute("value"), sDataType);
}
else
{
vValue1 = convert(oTR1.cells[iCol].firstChild.nodeValue, sDataType)
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;
}
}

</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值