《JavaScript高级程序设计》,英文书名为《Professional JavaScript for Web Developers》中的源码。
书是本绝对的好书,是《JavaScript权威指南》很好的补充。
第十二章,表格排序的原码,支持字符串,整形,浮点型,日期型,其它如图标排序。
原码直接下载地址:http://media.wiley.com/product_ancillary/88/07645790/DOWNLOAD/579088CodeExamples.zip
解压后,在文件夹 Chapter 12 里。
一、字符串,整形,浮点型,日期型排序
<
html
>
< head >
< title > Table Sort Example </ 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 > Click on the table header to sort in ascending order. </ p >
< table border ="1" id ="tblSort" >
< 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" > 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 >
< head >
< title > Table Sort Example </ 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 > Click on the table header to sort in ascending order. </ p >
< table border ="1" id ="tblSort" >
< 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" > 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 > Table Sort Example </ 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 > Click on the table header to sort. </ 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 > My Resume.doc </ td >
</ tr >
< tr >
< td value ="xls" >< img src ="images/excelicon.gif" /></ td >
< td > Fall Budget.xls </ td >
</ tr >
< tr >
< td value ="pdf" >< img src ="images/acrobaticon.gif" /></ td >
< td > How to be a better programmer.pdf </ td >
</ tr >
< tr >
< td value ="doc" >< img src ="images/wordicon.gif" /></ td >
< td > My Old Resume.doc </ td >
</ tr >
< tr >
< td value ="txt" >< img src ="images/notepadicon.gif" /></ td >
< td > Notes from Meeting.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 > Spring Budget.xls </ td >
</ tr >
< tr >
< td value ="doc" >< img src ="images/wordicon.gif" /></ td >
< td > Job Description - Web Designer.doc </ td >
</ tr >
< tr >
< td value ="pdf" >< img src ="images/acrobaticon.gif" /></ td >
< td > Saved Web Page.pdf </ td >
</ tr >
< tr >
< td value ="doc" >< img src ="images/wordicon.gif" /></ td >
< td > Chapter 1.doc </ td >
</ tr >
</ tbody >
</ table >
</ body >
</ html >
< head >
< title > Table Sort Example </ 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 > Click on the table header to sort. </ 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 > My Resume.doc </ td >
</ tr >
< tr >
< td value ="xls" >< img src ="images/excelicon.gif" /></ td >
< td > Fall Budget.xls </ td >
</ tr >
< tr >
< td value ="pdf" >< img src ="images/acrobaticon.gif" /></ td >
< td > How to be a better programmer.pdf </ td >
</ tr >
< tr >
< td value ="doc" >< img src ="images/wordicon.gif" /></ td >
< td > My Old Resume.doc </ td >
</ tr >
< tr >
< td value ="txt" >< img src ="images/notepadicon.gif" /></ td >
< td > Notes from Meeting.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 > Spring Budget.xls </ td >
</ tr >
< tr >
< td value ="doc" >< img src ="images/wordicon.gif" /></ td >
< td > Job Description - Web Designer.doc </ td >
</ tr >
< tr >
< td value ="pdf" >< img src ="images/acrobaticon.gif" /></ td >
< td > Saved Web Page.pdf </ td >
</ tr >
< tr >
< td value ="doc" >< img src ="images/wordicon.gif" /></ td >
< td > Chapter 1.doc </ td >
</ tr >
</ tbody >
</ table >
</ body >
</ html >