JS表格元素排序

<STYLE type=text/css>TABLE {
BORDER-RIGHT: #000000 2px solid; BORDER-TOP: #000000 2px solid; BORDER-LEFT: #000000 2px solid; BORDER-BOTTOM: #000000 2px solid; border-spacing: 0px; cell-spacing: 0px
}
TD {
PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; FONT-SIZE: 10pt; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; FONT-FAMILY: Arial, Helvetica, sans-serif; WHITE-SPACE: nowrap
}
TH {
PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; FONT-SIZE: 10pt; PADDING-BOTTOM: 2px; PADDING-TOP: 2px; FONT-FAMILY: Arial, Helvetica, sans-serif; WHITE-SPACE: nowrap
}
TD.numeric {
TEXT-ALIGN: right
}
TH {
BACKGROUND-COLOR: #c0c0c0
}
TH.mainHeader {
COLOR: #ffffff; BACKGROUND-COLOR: #808080; TEXT-ALIGN: left
}
TH A {
COLOR: #000080; TEXT-DECORATION: none
}
TH A:visited {
COLOR: #000080
}
TH A:active {
COLOR: #800000; TEXT-DECORATION: underline
}
TH A:hover {
COLOR: #800000; TEXT-DECORATION: underline
}
TR.alternateRow {
BACKGROUND-COLOR: #e0e0e0
}
TD.sortedColumn {
BACKGROUND-COLOR: #f0f0f0
}
TH.sortedColumn {
BACKGROUND-COLOR: #b0b0b0
}
TR.alternateRow TD.sortedColumn {
BACKGROUND-COLOR: #d0d0d0
}
</STYLE>
<SCRIPT type=text/javascript>
//-----------------------------------------------------------------------------
// sortTable(id, col, rev)
//
// id - ID of the TABLE, TBODY, THEAD or TFOOT element to be sorted.
// col - Index of the column to sort, 0 = first column, 1 = second column,
// etc.
// rev - If true, the column is sorted in reverse (descending) order
// initially.
//
// Note: the team name column (index 1) is used as a secondary sort column and
// always sorted in ascending order.
//-----------------------------------------------------------------------------
function sortTable(id, col, rev) {
// Get the table or table section to sort.
var tblEl = document.getElementById(id);
// The first time this function is called for a given table, set up an
// array of reverse sort flags.
if (tblEl.reverseSort == null) {
tblEl.reverseSort = new Array();
// Also, assume the team name column is initially sorted.
tblEl.lastColumn = 1;
}
// If this column has not been sorted before, set the initial sort direction.
if (tblEl.reverseSort[col] == null)
tblEl.reverseSort[col] = rev;
// If this column was the last one sorted, reverse its sort direction.
if (col == tblEl.lastColumn)
tblEl.reverseSort[col] = !tblEl.reverseSort[col];
// Remember this column as the last one sorted.
tblEl.lastColumn = col;
// Set the table display style to "none" - necessary for Netscape 6
// browsers.
var oldDsply = tblEl.style.display;
tblEl.style.display = "none";
// Sort the rows based on the content of the specified column using a
// selection sort.
var tmpEl;
var i, j;
var minVal, minIdx;
var testVal;
var cmp;
for (i = 0; i < tblEl.rows.length - 1; i++) {
// Assume the current row has the minimum value.
minIdx = i;
minVal = getTextValue(tblEl.rows[i].cells[col]);
// Search the rows that follow the current one for a smaller value.
for (j = i + 1; j < tblEl.rows.length; j++) {
testVal = getTextValue(tblEl.rows[j].cells[col]);
cmp = compareValues(minVal, testVal);
// Negate the comparison result if the reverse sort flag is set.
if (tblEl.reverseSort[col])
cmp = -cmp;
// Sort by the second column (team name) if those values are equal.
if (cmp == 0 && col != 1)
cmp = compareValues(getTextValue(tblEl.rows[minIdx].cells[1]),
getTextValue(tblEl.rows[j].cells[1]));
// If this row has a smaller value than the current minimum, remember its
// position and update the current minimum value.
if (cmp > 0) {
minIdx = j;
minVal = testVal;
}
}
// By now, we have the row with the smallest value. Remove it from the
// table and insert it before the current row.
if (minIdx > i) {
tmpEl = tblEl.removeChild(tblEl.rows[minIdx]);
tblEl.insertBefore(tmpEl, tblEl.rows[i]);
}
}
// Make it look pretty.
makePretty(tblEl, col);
// Set team rankings.
setRanks(tblEl, col, rev);
// Restore the table's display style.
tblEl.style.display = oldDsply;
return false;
}
//-----------------------------------------------------------------------------
// Functions to get and compare values during a sort.
//-----------------------------------------------------------------------------
// This code is necessary for browsers that don't reflect the DOM constants
// (like IE).
if (document.ELEMENT_NODE == null) {
document.ELEMENT_NODE = 1;
document.TEXT_NODE = 3;
}
function getTextValue(el) {
var i;
var s;
// Find and concatenate the values of all text nodes contained within the
// element.
s = "";
for (i = 0; i < el.childNodes.length; i++)
if (el.childNodes[i].nodeType == document.TEXT_NODE)
s += el.childNodes[i].nodeValue;
else if (el.childNodes[i].nodeType == document.ELEMENT_NODE &&
el.childNodes[i].tagName == "BR")
s += " ";
else
// Use recursion to get text within sub-elements.
s += getTextValue(el.childNodes[i]);
return normalizeString(s);
}
function compareValues(v1, v2) {
var f1, f2;
// If the values are numeric, convert them to floats.
f1 = parseFloat(v1);
f2 = parseFloat(v2);
if (!isNaN(f1) && !isNaN(f2)) {
v1 = f1;
v2 = f2;
}
// Compare the two values.
if (v1 == v2)
return 0;
if (v1 > v2)
return 1
return -1;
}
// Regular expressions for normalizing white space.
var whtSpEnds = new RegExp("^\\s*|\\s*$", "g");
var whtSpMult = new RegExp("\\s\\s+", "g");
function normalizeString(s) {
s = s.replace(whtSpMult, " "); // Collapse any multiple whites space.
s = s.replace(whtSpEnds, ""); // Remove leading or trailing white space.
return s;
}
//-----------------------------------------------------------------------------
// Functions to update the table appearance after a sort.
//-----------------------------------------------------------------------------
// Style class names.
var rowClsNm = "alternateRow";
var colClsNm = "sortedColumn";
// Regular expressions for setting class names.
var rowTest = new RegExp(rowClsNm, "gi");
var colTest = new RegExp(colClsNm, "gi");
function makePretty(tblEl, col) {
var i, j;
var rowEl, cellEl;
// Set style classes on each row to alternate their appearance.
for (i = 0; i < tblEl.rows.length; i++) {
rowEl = tblEl.rows[i];
rowEl.className = rowEl.className.replace(rowTest, "");
if (i % 2 != 0)
rowEl.className += " " + rowClsNm;
rowEl.className = normalizeString(rowEl.className);
// Set style classes on each column (other than the name column) to
// highlight the one that was sorted.
for (j = 2; j < tblEl.rows[i].cells.length; j++) {
cellEl = rowEl.cells[j];
cellEl.className = cellEl.className.replace(colTest, "");
if (j == col)
cellEl.className += " " + colClsNm;
cellEl.className = normalizeString(cellEl.className);
}
}
// Find the table header and highlight the column that was sorted.
var el = tblEl.parentNode.tHead;
rowEl = el.rows[el.rows.length - 1];
// Set style classes for each column as above.
for (i = 2; i < rowEl.cells.length; i++) {
cellEl = rowEl.cells[i];
cellEl.className = cellEl.className.replace(colTest, "");
// Highlight the header of the sorted column.
if (i == col)
cellEl.className += " " + colClsNm;
cellEl.className = normalizeString(cellEl.className);
}
}
function setRanks(tblEl, col, rev) {
// Determine whether to start at the top row of the table and go down or
// at the bottom row and work up. This is based on the current sort
// direction of the column and its reversed flag.
var i = 0;
var incr = 1;
if (tblEl.reverseSort[col])
rev = !rev;
if (rev) {
incr = -1;
i = tblEl.rows.length - 1;
}
// Now go through each row in that direction and assign it a rank by
// counting 1, 2, 3...
var count = 1;
var rank = count;
var curVal;
var lastVal = null;
// Note that this loop is skipped if the table was sorted on the name
// column.
while (col > 1 && i >= 0 && i < tblEl.rows.length) {
// Get the value of the sort column in this row.
curVal = getTextValue(tblEl.rows[i].cells[col]);
// On rows after the first, compare the sort value of this row to the
// previous one. If they differ, update the rank to match the current row
// count. (If they are the same, this row will get the same rank as the
// previous one.)
if (lastVal != null && compareValues(curVal, lastVal) != 0)
rank = count;
// Set the rank for this row.
tblEl.rows[i].rank = rank;
// Save the sort value of the current row for the next time around and bump
// the row counter and index.
lastVal = curVal;
count++;
i += incr;
}
// Now go through each row (from top to bottom) and display its rank. Note
// that when two or more rows are tied, the rank is shown on the first of
// those rows only.
var rowEl, cellEl;
var lastRank = 0;
// Go through the rows from top to bottom.
for (i = 0; i < tblEl.rows.length; i++) {
rowEl = tblEl.rows[i];
cellEl = rowEl.cells[0];
// Delete anything currently in the rank column.
while (cellEl.lastChild != null)
cellEl.removeChild(cellEl.lastChild);
// If this row's rank is different from the previous one, Insert a new text
// node with that rank.
if (col > 1 && rowEl.rank != lastRank) {
cellEl.appendChild(document.createTextNode(rowEl.rank));
lastRank = rowEl.rank;
}
}
}
</SCRIPT>
<META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD>
<BODY>
<P><!-- Offensive statistics table. -->
<TABLE cellSpacing=0 cellPadding=0 border=0>
<THEAD>
<TR>
<TH class=mainHeader colSpan=11>NFL 2001 Offensive Stats</TH></TR>
<TR>
<TH style="TEXT-ALIGN: left">Rank</TH>
<TH style="TEXT-ALIGN: left"><A title="Team Name"
οnclick="this.blur(); return sortTable('offTblBdy', 1, false);"
href="http://www.brainjar.com/dhtml/tablesort/">Team</A></TH>
<TH><SPAN title="Games Played">Gms</SPAN></TH>
<TH><A title="Total Yards"
οnclick="this.blur(); return sortTable('offTblBdy', 3, true);"
href="http://www.brainjar.com/dhtml/tablesort/">Yds</A></TH>
<TH><A title="Yards Per Game"
οnclick="this.blur(); return sortTable('offTblBdy', 4, true);"
href="http://www.brainjar.com/dhtml/tablesort/">Yds/G</A></TH>
<TH><A title="Total Rushing Yards"
οnclick="this.blur(); return sortTable('offTblBdy', 5, true);"
href="http://www.brainjar.com/dhtml/tablesort/">RuYds</A></TH>
<TH><A title="Rushing Yards Per Game"
οnclick="this.blur(); return sortTable('offTblBdy', 6, true);"
href="http://www.brainjar.com/dhtml/tablesort/">RuYds/G</A></TH>
<TH><A title="Total Passing Yards"
οnclick="this.blur(); return sortTable('offTblBdy', 7, true);"
href="http://www.brainjar.com/dhtml/tablesort/">PaYds</A></TH>
<TH><A title="Passing Yards Per Game"
οnclick="this.blur(); return sortTable('offTblBdy', 8, true);"
href="http://www.brainjar.com/dhtml/tablesort/">PaYds/G</A></TH>
<TH><A title="Total Points Scored"
οnclick="this.blur(); return sortTable('offTblBdy', 9, true);"
href="http://www.brainjar.com/dhtml/tablesort/">Pts</A></TH>
<TH><A title="Points Per Game"
οnclick="this.blur(); return sortTable('offTblBdy', 10, true);"
href="http://www.brainjar.com/dhtml/tablesort/">Pts/G</A></TH></TR></THEAD>
<TBODY id=offTblBdy>
<TR>
<TD class=numeric></TD>
<TD>Arizona</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4898</TD>
<TD class=numeric>306.1</TD>
<TD class=numeric>1449</TD>
<TD class=numeric>90.6</TD>
<TD class=numeric>3449</TD>
<TD class=numeric>215.6</TD>
<TD class=numeric>295</TD>
<TD class=numeric>18.4</TD></TR>
<TR class=alternateRow>
<TD class=numeric></TD>
<TD>Atlanta</TD>
<TD class=numeric>16</TD>
<TD class=numeric>5070</TD>
<TD class=numeric>316.9</TD>
<TD class=numeric>1773</TD>
<TD class=numeric>110.8</TD>
<TD class=numeric>3297</TD>
<TD class=numeric>206.1</TD>
<TD class=numeric>291</TD>
<TD class=numeric>18.2</TD></TR>
<TR>
<TD class=numeric></TD>
<TD>Baltimore</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4773</TD>
<TD class=numeric>318.2</TD>
<TD class=numeric>1598</TD>
<TD class=numeric>106.5</TD>
<TD class=numeric>3175</TD>
<TD class=numeric>211.7</TD>
<TD class=numeric>284</TD>
<TD class=numeric>18.9</TD></TR>
<TR class=alternateRow>
<TD class=numeric></TD>
<TD>Buffalo</TD>
<TD class=numeric>16</TD>
<TD class=numeric>5137</TD>
<TD class=numeric>321.1</TD>
<TD class=numeric>1686</TD>
<TD class=numeric>105.4</TD>
<TD class=numeric>3451</TD>
<TD class=numeric>215.7</TD>
<TD class=numeric>265</TD>
<TD class=numeric>16.6</TD></TR>
<TR>
<TD class=numeric></TD>
<TD>Carolina</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4254</TD>
<TD class=numeric>265.9</TD>
<TD class=numeric>1372</TD>
<TD class=numeric>85.8</TD>
<TD class=numeric>2882</TD>
<TD class=numeric>180.1</TD>
<TD class=numeric>253</TD>
<TD class=numeric>15.8</TD></TR>
<TR class=alternateRow>
<TD class=numeric></TD>
<TD>Chicago</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4694</TD>
<TD class=numeric>293.4</TD>
<TD class=numeric>1742</TD>
<TD class=numeric>108.9</TD>
<TD class=numeric>2952</TD>
<TD class=numeric>184.5</TD>
<TD class=numeric>338</TD>
<TD class=numeric>21.1</TD></TR>
<TR>
<TD class=numeric></TD>
<TD>Cincinnati</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4800</TD>
<TD class=numeric>300.0</TD>
<TD class=numeric>1712</TD>
<TD class=numeric>107.0</TD>
<TD class=numeric>3088</TD>
<TD class=numeric>193.0</TD>
<TD class=numeric>226</TD>
<TD class=numeric>14.1</TD></TR>
<TR class=alternateRow>
<TD class=numeric></TD>
<TD>Cleveland</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4152</TD>
<TD class=numeric>259.5</TD>
<TD class=numeric>1351</TD>
<TD class=numeric>84.4</TD>
<TD class=numeric>2801</TD>
<TD class=numeric>175.1</TD>
<TD class=numeric>285</TD>
<TD class=numeric>17.8</TD></TR>
<TR>
<TD class=numeric></TD>
<TD>Dallas</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4402</TD>
<TD class=numeric>275.1</TD>
<TD class=numeric>2184</TD>
<TD class=numeric>136.5</TD>
<TD class=numeric>2218</TD>
<TD class=numeric>138.6</TD>
<TD class=numeric>246</TD>
<TD class=numeric>15.4</TD></TR>
<TR class=alternateRow>
<TD class=numeric></TD>
<TD>Denver</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4817</TD>
<TD class=numeric>301.1</TD>
<TD class=numeric>1877</TD>
<TD class=numeric>117.3</TD>
<TD class=numeric>2940</TD>
<TD class=numeric>183.8</TD>
<TD class=numeric>340</TD>
<TD class=numeric>21.2</TD></TR>
<TR>
<TD class=numeric></TD>
<TD>Detroit</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4994</TD>
<TD class=numeric>312.1</TD>
<TD class=numeric>1398</TD>
<TD class=numeric>87.4</TD>
<TD class=numeric>3596</TD>
<TD class=numeric>224.8</TD>
<TD class=numeric>270</TD>
<TD class=numeric>16.9</TD></TR>
<TR class=alternateRow>
<TD class=numeric></TD>
<TD>Green Bay</TD>
<TD class=numeric>16</TD>
<TD class=numeric>5463</TD>
<TD class=numeric>341.4</TD>
<TD class=numeric>1693</TD>
<TD class=numeric>105.8</TD>
<TD class=numeric>3770</TD>
<TD class=numeric>235.6</TD>
<TD class=numeric>390</TD>
<TD class=numeric>24.4</TD></TR>
<TR>
<TD class=numeric></TD>
<TD>Indianapolis</TD>
<TD class=numeric>16</TD>
<TD class=numeric>5955</TD>
<TD class=numeric>372.2</TD>
<TD class=numeric>1966</TD>
<TD class=numeric>122.9</TD>
<TD class=numeric>3989</TD>
<TD class=numeric>249.3</TD>
<TD class=numeric>413</TD>
<TD class=numeric>25.8</TD></TR>
<TR class=alternateRow>
<TD class=numeric></TD>
<TD>Jacksonville</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4840</TD>
<TD class=numeric>302.5</TD>
<TD class=numeric>1600</TD>
<TD class=numeric>100.0</TD>
<TD class=numeric>3240</TD>
<TD class=numeric>202.5</TD>
<TD class=numeric>294</TD>
<TD class=numeric>18.4</TD></TR>
<TR>
<TD class=numeric></TD>
<TD>Kansas City</TD>
<TD class=numeric>16</TD>
<TD class=numeric>5673</TD>
<TD class=numeric>354.6</TD>
<TD class=numeric>2008</TD>
<TD class=numeric>125.5</TD>
<TD class=numeric>3665</TD>
<TD class=numeric>229.1</TD>
<TD class=numeric>320</TD>
<TD class=numeric>20.0</TD></TR>
<TR class=alternateRow>
<TD class=numeric></TD>
<TD>Miami</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4821</TD>
<TD class=numeric>301.3</TD>
<TD class=numeric>1664</TD>
<TD class=numeric>104.0</TD>
<TD class=numeric>3157</TD>
<TD class=numeric>197.3</TD>
<TD class=numeric>344</TD>
<TD class=numeric>21.5</TD></TR>
<TR>
<TD class=numeric></TD>
<TD>Minnesota</TD>
<TD class=numeric>16</TD>
<TD class=numeric>5006</TD>
<TD class=numeric>333.7</TD>
<TD class=numeric>1523</TD>
<TD class=numeric>101.5</TD>
<TD class=numeric>3483</TD>
<TD class=numeric>232.2</TD>
<TD class=numeric>287</TD>
<TD class=numeric>19.1</TD></TR>
<TR class=alternateRow>
<TD class=numeric></TD>
<TD>New England</TD>
<TD class=numeric>16</TD>
<TD class=numeric>4882</TD>
<TD class=numeric>305.1</TD>
<TD class=numeric>1793</TD>
<TD class=numeric>112.1</TD>
<TD class=numeric>3089</TD>
<TD class=numeric>193.1</TD>
<TD class=numeric>371</TD>
<TD class=numeric>23.2</TD></TR>
<TR>
<TD class=numeric></TD>
<TD>New orleans</TD>
<TD class=numeric>16</TD>
<TD class=numeric>5226</TD>
<TD class=numeric>326.6</TD>
<TD class=numeric>1712</TD>
<TD class=numeric>107.0</TD>
<TD class=numeric>3514</TD>
<TD class=numeric>219.6</TD>
<TD class=numeric>333</TD>
<TD class=numeric>20.8</TD></TR>
<TR class=alternateRow>
<TD class=numeric></TD>
<TD>New York Giants</TD>
<TD class=numeric>16</TD>
<TD class=numeric>5335</TD>
<TD class=numeric>333.4</TD>
<TD class=numeric>1777</TD>
<TD class=numeric>111.1</TD>
<TD class=numeric>3558</TD>
<TD class=numeric>222.4</TD>
<TD class=numeric>294</TD>
<TD class=numeric>18.4</TD></TR>
</TBODY></TABLE>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值