JavaScript 表格排序 -《JavaScript高级程序设计》源码

《JavaScript高级程序设计》,英文书名为《Professional JavaScript for Web Developers》中的源码。

书是本绝对的好书,是《JavaScript权威指南》很好的补充。

第十二章,表格排序的原码,支持字符串,整形,浮点型,日期型,其它如图标排序。

原码直接下载地址:http://media.wiley.com/product_ancillary/88/07645790/DOWNLOAD/579088CodeExamples.zip

解压后,在文件夹 Chapter 12 里。

一、字符串,整形,浮点型,日期型排序

< html >
< head >
< title > TableSortExample </ title >
< script type ="text/javascript" >

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();

}
}

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 sortTable(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);
oTable.sortCol
= iCol;
}

</ script >
</ head >
< body >
< p > Clickonthetableheadertosortinascendingorder. </ p >
< table border ="1" id ="tblSort" >
< thead >
< tr >
< th onclick ="sortTable('tblSort',0)"
style
="cursor:pointer" > LastName </ th >
< th onclick ="sortTable('tblSort',1)"
style
="cursor:pointer" > FirstName </ th >
< th onclick ="sortTable('tblSort',2,'date')"
style
="cursor:pointer" > Birthday </ th >
< th onclick ="sortTable('tblSort',3,'int')"
style
="cursor:pointer" > Siblings </ th >
</ tr >
</ thead >
< tbody >
< tr >
< td > Smith </ td >
< td > John </ td >
< td > 7/12/1978 </ td >
< td > 2 </ td >
</ tr >
< tr >
< td > Johnson </ td >
< td > Betty </ td >
< td > 10/15/1977 </ td >
< td > 4 </ td >
</ tr >
< tr >
< td > Henderson </ td >
< td > Nathan </ td >
< td > 2/25/1949 </ td >
< td > 1 </ td >
</ tr >
< tr >
< td > Williams </ td >
< td > James </ td >
< td > 7/8/1980 </ td >
< td > 4 </ td >
</ tr >
< tr >
< td > Gilliam </ td >
< td > Michael </ td >
< td > 7/22/1949 </ td >
< td > 1 </ td >
</ tr >
< tr >
< td > Walker </ td >
< td > Matthew </ td >
< td > 1/14/2000 </ td >
< td > 3 </ td >
</ tr >
</ tbody >
</ table >
</ body >
</ html >

二、带图标的排序

< html >
< head >
< title > TableSortExample </ title >
< script type ="text/javascript" >

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();

}
}

function generateCompareTRs(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 sortTable(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);
oTable.sortCol
= iCol;
}

</ script >
</ head >
< body >
< p > Clickonthetableheadertosort. </ p >
< table border ="1" id ="tblSort" >
< thead >
< tr >
< th onclick ="sortTable('tblSort',0)" style ="cursor:pointer" > Type </ th >
< th onclick ="sortTable('tblSort',1)" style ="cursor:pointer" > Filename </ th >
</ tr >
</ thead >
< tbody >
< tr >
< td value ="doc" >< img src ="images/wordicon.gif" /></ td >
< td > MyResume.doc </ td >
</ tr >
< tr >
< td value ="xls" >< img src ="images/excelicon.gif" /></ td >
< td > FallBudget.xls </ td >
</ tr >
< tr >
< td value ="pdf" >< img src ="images/acrobaticon.gif" /></ td >
< td > Howtobeabetterprogrammer.pdf </ td >
</ tr >
< tr >
< td value ="doc" >< img src ="images/wordicon.gif" /></ td >
< td > MyOldResume.doc </ td >
</ tr >
< tr >
< td value ="txt" >< img src ="images/notepadicon.gif" /></ td >
< td > NotesfromMeeting.txt </ td >
</ tr >
< tr >
< td value ="zip" >< img src ="images/zippedfoldericon.gif" /></ td >
< td > Backups.zip </ td >
</ tr >
< tr >
< td value ="xls" >< img src ="images/excelicon.gif" /></ td >
< td > SpringBudget.xls </ td >
</ tr >
< tr >
< td value ="doc" >< img src ="images/wordicon.gif" /></ td >
< td > JobDescription-WebDesigner.doc </ td >
</ tr >
< tr >
< td value ="pdf" >< img src ="images/acrobaticon.gif" /></ td >
< td > SavedWebPage.pdf </ td >
</ tr >
< tr >
< td value ="doc" >< img src ="images/wordicon.gif" /></ td >
< td > Chapter1.doc </ td >
</ tr >
</ tbody >
</ table >
</ body >
</ html >

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值