首页 > 编程 > JavaScript > 正文

JavaScript实现表格点击排序的方法

2019-11-20 12:30:22
字体:
来源:转载
供稿:网友

本文实例讲述了JavaScript实现表格点击排序的方法。分享给大家供大家参考。具体分析如下:

这里实现基于JS的表格点击排序效果,可以根据表格内的数据大小自动按顺序排列,股票网站常会见到这种功能。

<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>表格排序</title></head><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>function sortTable(id, col, rev) { var tblEl = document.getElementById(id); if (tblEl.reverseSort == null) {  tblEl.reverseSort = new Array();  tblEl.lastColumn = 1; } if (tblEl.reverseSort[col] == null)  tblEl.reverseSort[col] = rev; if (col == tblEl.lastColumn)  tblEl.reverseSort[col] = !tblEl.reverseSort[col]; tblEl.lastColumn = col; var oldDsply = tblEl.style.display; tblEl.style.display = "none"; var tmpEl; var i, j; var minVal, minIdx; var testVal; var cmp; for (i = 0; i < tblEl.rows.length - 1; i++) {  minIdx = i;  minVal = getTextValue(tblEl.rows[i].cells[col]);  for (j = i + 1; j < tblEl.rows.length; j++) {   testVal = getTextValue(tblEl.rows[j].cells[col]);   cmp = compareValues(minVal, testVal);   if (tblEl.reverseSort[col])    cmp = -cmp;   if (cmp == 0 && col != 1)    cmp = compareValues(getTextValue(tblEl.rows[minIdx].cells[1]),              getTextValue(tblEl.rows[j].cells[1]));   if (cmp > 0) {    minIdx = j;    minVal = testVal;   }  }  if (minIdx > i) {   tmpEl = tblEl.removeChild(tblEl.rows[minIdx]);   tblEl.insertBefore(tmpEl, tblEl.rows[i]);  } } makePretty(tblEl, col); setRanks(tblEl, col, rev); tblEl.style.display = oldDsply; return false;}if (document.ELEMENT_NODE == null) { document.ELEMENT_NODE = 1; document.TEXT_NODE = 3;}function getTextValue(el) { var i; var s; 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; 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;}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;}var rowClsNm = "alternateRow";var colClsNm = "sortedColumn";var rowTest = new RegExp(rowClsNm, "gi");var colTest = new RegExp(colClsNm, "gi");function makePretty(tblEl, col) { var i, j; var rowEl, cellEl; 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);  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);  } } var el = tblEl.parentNode.tHead; rowEl = el.rows[el.rows.length - 1]; for (i = 2; i < rowEl.cells.length; i++) {  cellEl = rowEl.cells[i];  cellEl.className = cellEl.className.replace(colTest, "");  if (i == col)   cellEl.className += " " + colClsNm;   cellEl.className = normalizeString(cellEl.className); }}function setRanks(tblEl, col, rev) { var i  = 0; var incr = 1; if (tblEl.reverseSort[col])  rev = !rev; if (rev) {  incr = -1;  i = tblEl.rows.length - 1; } var count  = 1; var rank  = count; var curVal; var lastVal = null; while (col > 1 && i >= 0 && i < tblEl.rows.length) {  curVal = getTextValue(tblEl.rows[i].cells[col]);  if (lastVal != null && compareValues(curVal, lastVal) != 0)    rank = count;  tblEl.rows[i].rank = rank;  lastVal = curVal;  count++;  i += incr; } var rowEl, cellEl; var lastRank = 0; for (i = 0; i < tblEl.rows.length; i++) {  rowEl = tblEl.rows[i];  cellEl = rowEl.cells[0];  while (cellEl.lastChild != null)   cellEl.removeChild(cellEl.lastChild);  if (col > 1 && rowEl.rank != lastRank) {   cellEl.appendChild(document.createTextNode(rowEl.rank));   lastRank = rowEl.rank;  } }}</SCRIPT></HEAD><BODY><!-- 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"    onclick="this.blur(); return sortTable('offTblBdy', 1, false);"    href="#">Team</A></TH>  <TH><SPAN title="Games Played">Gms</SPAN></TH>  <TH><A title="Total Yards"    onclick="this.blur(); return sortTable('offTblBdy', 3, true);"    href="#">Yds</A></TH>  <TH><A title="Yards Per Game"    onclick="this.blur(); return sortTable('offTblBdy', 4, true);"    href="#">Yds/G</A></TH>  <TH><A title="Total Rushing Yards"    onclick="this.blur(); return sortTable('offTblBdy', 5, true);"    href="#">RuYds</A></TH>  <TH><A title="Rushing Yards Per Game"    onclick="this.blur(); return sortTable('offTblBdy', 6, true);"    href="#">RuYds/G</A></TH>  <TH><A title="Total Passing Yards"    onclick="this.blur(); return sortTable('offTblBdy', 7, true);"    href="#">PaYds</A></TH>  <TH><A title="Passing Yards Per Game"    onclick="this.blur(); return sortTable('offTblBdy', 8, true);"    href="#">PaYds/G</A></TH>  <TH><A title="Total Points Scored"    onclick="this.blur(); return sortTable('offTblBdy', 9, true);"    href="#">Pts</A></TH>  <TH><A title="Points Per Game"    onclick="this.blur(); return sortTable('offTblBdy', 10, true);"    href="#">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>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>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></BODY></HTML>

希望本文所述对大家的javascript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表