var tableSort = new Object();
//类型转换函数
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();
}
}
/*
* 比较函数生成器
* 函数其实和JavaScript中其他数据类型一样,也可以作为参数传递或者作为函数的返回值
* 接受两个参数:
* iCol:列索引
* sDataType:该列中数据的类型
*/
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);
//Date对象的valueOf()以及小于和大于号可以比较它们的毫秒表示形式
if(vValue1 < vValue2)
return -1;
else if(vValue1 > vValue2)
return 1;
else
return 0;
};
}
tableSort.sortTable = function(sTableID,iCol,sDataType)
{
var oTable = document.getElementById(sTableID);
var oTBody = oTable.tBodies[0];
var colDataRows = oTBody.rows;
var aTRs = new Array;
for(var i=0; i<colDataRows.length; i++)
aTRs[i] = colDataRows[i];
if(oTable.sortCol == iCol)
//逆序
aTRs.reverse();
else
aTRs.sort(generateCompareTRs(iCol,sDataType));
var oFragment = document.createDocumentFragment();
for(var i=0; i<aTRs.length; i++)
oFragment.appendChild(aTRs[i]);
oTBody.appendChild(oFragment);
/*
* 在表格上创建expando特性
* expando特性是运行时为对象添加的额外的JavaScript特性
* 这里的expando特性称为sortCol,用来保存最后进行排序的列索引
*/
oTable.sortCol = iCol;
}
转载于:https://www.cnblogs.com/simply-zhao/archive/2008/01/03/1025175.html