首页 > 语言 > JavaScript > 正文

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

2024-05-06 16:19:56
字体:
来源:转载
供稿:网友

这篇文章主要介绍了JavaScript实现表格点击排序的方法,可实现点击顶部数据项标题实现对应数据列的排序效果,涉及javascript鼠标事件及数据排序的技巧,需要的朋友可以参考下

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

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

 

 
  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"
  4. <title>表格排序</title> 
  5. </head> 
  6. <STYLE type=text/css>TABLE { 
  7. BORDER-RIGHT: #000000 2px solid; BORDER-TOP: #000000 2px solid; 
  8. BORDER-LEFT: #000000 2px solid; BORDER-BOTTOM: #000000 2px solid; 
  9. border-spacing: 0px; cell-spacing: 0px 
  10. TD { 
  11. PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; FONT-SIZE: 10pt; 
  12. PADDING-BOTTOM: 2px; PADDING-TOP: 2px;  
  13. FONT-FAMILY: Arial, Helvetica, sans-serif; WHITE-SPACE: nowrap 
  14. TH { 
  15. PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; FONT-SIZE: 10pt; 
  16. PADDING-BOTTOM: 2px; PADDING-TOP: 2px; 
  17. FONT-FAMILY: Arial, Helvetica, sans-serif; WHITE-SPACE: nowrap 
  18. TD.numeric { 
  19. TEXT-ALIGN: right 
  20. TH { 
  21. BACKGROUND-COLOR: #c0c0c0 
  22. TH.mainHeader { 
  23. COLOR: #ffffff; BACKGROUND-COLOR: #808080; TEXT-ALIGN: left 
  24. TH A { 
  25. COLOR: #000080; TEXT-DECORATION: none 
  26. TH A:visited { 
  27. COLOR: #000080 
  28. TH A:active { 
  29. COLOR: #800000; TEXT-DECORATION: underline 
  30. TH A:hover { 
  31. COLOR: #800000; TEXT-DECORATION: underline 
  32. TR.alternateRow { 
  33. BACKGROUND-COLOR: #e0e0e0 
  34. TD.sortedColumn { 
  35. BACKGROUND-COLOR: #f0f0f0 
  36. TH.sortedColumn { 
  37. BACKGROUND-COLOR: #b0b0b0 
  38. TR.alternateRow TD.sortedColumn { 
  39. BACKGROUND-COLOR: #d0d0d0 
  40. </STYLE> 
  41. <SCRIPT type=text/javascript> 
  42. function sortTable(id, col, rev) { 
  43. var tblEl = document.getElementById(id); 
  44. if (tblEl.reverseSort == null) { 
  45. tblEl.reverseSort = new Array(); 
  46. tblEl.lastColumn = 1; 
  47. if (tblEl.reverseSort[col] == null
  48. tblEl.reverseSort[col] = rev; 
  49. if (col == tblEl.lastColumn) 
  50. tblEl.reverseSort[col] = !tblEl.reverseSort[col]; 
  51. tblEl.lastColumn = col; 
  52. var oldDsply = tblEl.style.display; 
  53. tblEl.style.display = "none"
  54. var tmpEl; 
  55. var i, j; 
  56. var minVal, minIdx; 
  57. var testVal; 
  58. var cmp; 
  59. for (i = 0; i < tblEl.rows.length - 1; i++) { 
  60. minIdx = i; 
  61. minVal = getTextValue(tblEl.rows[i].cells[col]); 
  62. for (j = i + 1; j < tblEl.rows.length; j++) { 
  63. testVal = getTextValue(tblEl.rows[j].cells[col]); 
  64. cmp = compareValues(minVal, testVal); 
  65. if (tblEl.reverseSort[col]) 
  66. cmp = -cmp; 
  67. if (cmp == 0 && col != 1) 
  68. cmp = compareValues(getTextValue(tblEl.rows[minIdx].cells[1]), 
  69. getTextValue(tblEl.rows[j].cells[1])); 
  70. if (cmp > 0) { 
  71. minIdx = j; 
  72. minVal = testVal; 
  73. if (minIdx > i) { 
  74. tmpEl = tblEl.removeChild(tblEl.rows[minIdx]); 
  75. tblEl.insertBefore(tmpEl, tblEl.rows[i]); 
  76. makePretty(tblEl, col); 
  77. setRanks(tblEl, col, rev); 
  78. tblEl.style.display = oldDsply; 
  79. return false
  80. if (document.ELEMENT_NODE == null) { 
  81. document.ELEMENT_NODE = 1; 
  82. document.TEXT_NODE = 3; 
  83. function getTextValue(el) { 
  84. var i; 
  85. var s; 
  86. s = ""
  87. for (i = 0; i < el.childNodes.length; i++) 
  88. if (el.childNodes[i].nodeType == document.TEXT_NODE) 
  89. s += el.childNodes[i].nodeValue; 
  90. else if (el.childNodes[i].nodeType == document.ELEMENT_NODE &&  
  91. el.childNodes[i].tagName == "BR"
  92. s += " "
  93. else 
  94. // Use recursion to get text within sub-elements. 
  95. s += getTextValue(el.childNodes[i]); 
  96. return normalizeString(s); 
  97. function compareValues(v1, v2) { 
  98. var f1, f2; 
  99. f1 = parseFloat(v1); 
  100. f2 = parseFloat(v2); 
  101. if (!isNaN(f1) && !isNaN(f2)) { 
  102. v1 = f1; 
  103. v2 = f2; 
  104. // Compare the two values. 
  105. if (v1 == v2) 
  106. return 0; 
  107. if (v1 > v2) 
  108. return 1 
  109. return -1; 
  110. var whtSpEnds = new RegExp("^//s*|//s*$""g"); 
  111. var whtSpMult = new RegExp("//s//s+""g"); 
  112. function normalizeString(s) { 
  113. s = s.replace(whtSpMult, " "); // Collapse any multiple whites space. 
  114. s = s.replace(whtSpEnds, ""); // Remove leading or trailing white space. 
  115. return s; 
  116. var rowClsNm = "alternateRow"
  117. var colClsNm = "sortedColumn"
  118. var rowTest = new RegExp(rowClsNm, "gi"); 
  119. var colTest = new RegExp(colClsNm, "gi"); 
  120. function makePretty(tblEl, col) { 
  121. var i, j; 
  122. var rowEl, cellEl; 
  123. for (i = 0; i < tblEl.rows.length; i++) { 
  124. rowEl = tblEl.rows[i]; 
  125. rowEl.className = rowEl.className.replace(rowTest, ""); 
  126. if (i % 2 != 0) 
  127. rowEl.className += " " + rowClsNm; 
  128. rowEl.className = normalizeString(rowEl.className); 
  129. for (j = 2; j < tblEl.rows[i].cells.length; j++) { 
  130. cellEl = rowEl.cells[j]; 
  131. cellEl.className = cellEl.className.replace(colTest, ""); 
  132. if (j == col) 
  133. cellEl.className += " " + colClsNm; 
  134. cellEl.className = normalizeString(cellEl.className); 
  135. var el = tblEl.parentNode.tHead; 
  136. rowEl = el.rows[el.rows.length - 1]; 
  137. for (i = 2; i < rowEl.cells.length; i++) { 
  138. cellEl = rowEl.cells[i]; 
  139. cellEl.className = cellEl.className.replace(colTest, ""); 
  140. if (i == col) 
  141. cellEl.className += " " + colClsNm; 
  142. cellEl.className = normalizeString(cellEl.className); 
  143. function setRanks(tblEl, col, rev) { 
  144. var i = 0; 
  145. var incr = 1; 
  146. if (tblEl.reverseSort[col]) 
  147. rev = !rev; 
  148. if (rev) { 
  149. incr = -1; 
  150. i = tblEl.rows.length - 1; 
  151. var count = 1; 
  152. var rank = count; 
  153. var curVal; 
  154. var lastVal = null
  155. while (col > 1 && i >= 0 && i < tblEl.rows.length) { 
  156. curVal = getTextValue(tblEl.rows[i].cells[col]); 
  157. if (lastVal != null && compareValues(curVal, lastVal) != 0) 
  158. rank = count; 
  159. tblEl.rows[i].rank = rank; 
  160. lastVal = curVal; 
  161. count++; 
  162. i += incr; 
  163. var rowEl, cellEl; 
  164. var lastRank = 0; 
  165. for (i = 0; i < tblEl.rows.length; i++) { 
  166. rowEl = tblEl.rows[i]; 
  167. cellEl = rowEl.cells[0]; 
  168. while (cellEl.lastChild != null
  169. cellEl.removeChild(cellEl.lastChild); 
  170. if (col > 1 && rowEl.rank != lastRank) { 
  171. cellEl.appendChild(document.createTextNode(rowEl.rank)); 
  172. lastRank = rowEl.rank; 
  173. </SCRIPT> 
  174. </HEAD> 
  175. <BODY> 
  176. <!-- Offensive statistics table. --> 
  177. <TABLE cellSpacing=0 cellPadding=0 border=0> 
  178. <THEAD> 
  179. <TR> 
  180. <TH class=mainHeader colSpan=11>NFL 2001 Offensive Stats</TH></TR> 
  181. <TR> 
  182. <TH style="TEXT-ALIGN: left">Rank</TH> 
  183. <TH style="TEXT-ALIGN: left"><A title="Team Name" 
  184. onclick="this.blur(); return sortTable('offTblBdy', 1, false);" 
  185. href="#">Team</A></TH> 
  186. <TH><SPAN title="Games Played">Gms</SPAN></TH> 
  187. <TH><A title="Total Yards" 
  188. onclick="this.blur(); return sortTable('offTblBdy', 3, true);" 
  189. href="#">Yds</A></TH> 
  190. <TH><A title="Yards Per Game" 
  191. onclick="this.blur(); return sortTable('offTblBdy', 4, true);" 
  192. href="#">Yds/G</A></TH> 
  193. <TH><A title="Total Rushing Yards" 
  194. onclick="this.blur(); return sortTable('offTblBdy', 5, true);" 
  195. href="#">RuYds</A></TH> 
  196. <TH><A title="Rushing Yards Per Game" 
  197. onclick="this.blur(); return sortTable('offTblBdy', 6, true);" 
  198. href="#">RuYds/G</A></TH> 
  199. <TH><A title="Total Passing Yards" 
  200. onclick="this.blur(); return sortTable('offTblBdy', 7, true);" 
  201. href="#">PaYds</A></TH> 
  202. <TH><A title="Passing Yards Per Game" 
  203. onclick="this.blur(); return sortTable('offTblBdy', 8, true);" 
  204. href="#">PaYds/G</A></TH> 
  205. <TH><A title="Total Points Scored" 
  206. onclick="this.blur(); return sortTable('offTblBdy', 9, true);" 
  207. href="#">Pts</A></TH> 
  208. <TH><A title="Points Per Game" 
  209. onclick="this.blur(); return sortTable('offTblBdy', 10, true);" 
  210. href="#">Pts/G</A></TH></TR></THEAD> 
  211. <TBODY id=offTblBdy> 
  212. <TR> 
  213. <TD class=numeric></TD> 
  214. <TD>Arizona</TD> 
  215. <TD class=numeric>16</TD> 
  216. <TD class=numeric>4898</TD> 
  217. <TD class=numeric>306.1</TD> 
  218. <TD class=numeric>1449</TD> 
  219. <TD class=numeric>90.6</TD> 
  220. <TD class=numeric>3449</TD> 
  221. <TD class=numeric>215.6</TD> 
  222. <TD class=numeric>295</TD> 
  223. <TD class=numeric>18.4</TD></TR> 
  224. <TR class=alternateRow> 
  225. <TD class=numeric></TD> 
  226. <TD>Atlanta</TD> 
  227. <TD class=numeric>16</TD> 
  228. <TD class=numeric>5070</TD> 
  229. <TD class=numeric>316.9</TD> 
  230. <TD class=numeric>1773</TD> 
  231. <TD class=numeric>110.8</TD> 
  232. <TD class=numeric>3297</TD> 
  233.  
  234. <TD class=numeric>206.1</TD> 
  235. <TD class=numeric>291</TD> 
  236. <TD class=numeric>18.2</TD></TR> 
  237. <TR> 
  238. <TD class=numeric></TD> 
  239. <TD>Detroit</TD> 
  240. <TD class=numeric>16</TD> 
  241. <TD class=numeric>4994</TD> 
  242. <TD class=numeric>312.1</TD> 
  243. <TD class=numeric>1398</TD> 
  244. <TD class=numeric>87.4</TD> 
  245. <TD class=numeric>3596</TD> 
  246. <TD class=numeric>224.8</TD> 
  247. <TD class=numeric>270</TD> 
  248. <TD class=numeric>16.9</TD></TR> 
  249. <TR class=alternateRow> 
  250. <TD class=numeric></TD> 
  251. <TD>Jacksonville</TD> 
  252. <TD class=numeric>16</TD> 
  253. <TD class=numeric>4840</TD> 
  254. <TD class=numeric>302.5</TD> 
  255. <TD class=numeric>1600</TD> 
  256. <TD class=numeric>100.0</TD> 
  257. <TD class=numeric>3240</TD> 
  258. <TD class=numeric>202.5</TD> 
  259. <TD class=numeric>294</TD> 
  260. <TD class=numeric>18.4</TD></TR> 
  261. <TR> 
  262. <TD class=numeric></TD> 
  263. <TD>Kansas City</TD> 
  264. <TD class=numeric>16</TD> 
  265. <TD class=numeric>5673</TD> 
  266. <TD class=numeric>354.6</TD> 
  267. <TD class=numeric>2008</TD> 
  268. <TD class=numeric>125.5</TD> 
  269. <TD class=numeric>3665</TD> 
  270. <TD class=numeric>229.1</TD> 
  271. <TD class=numeric>320</TD> 
  272. <TD class=numeric>20.0</TD></TR> 
  273. <TR class=alternateRow> 
  274. <TD class=numeric></TD> 
  275. <TD>Miami</TD> 
  276. <TD class=numeric>16</TD> 
  277. <TD class=numeric>4821</TD> 
  278. <TD class=numeric>301.3</TD> 
  279. <TD class=numeric>1664</TD> 
  280. <TD class=numeric>104.0</TD> 
  281. <TD class=numeric>3157</TD> 
  282. <TD class=numeric>197.3</TD> 
  283. <TD class=numeric>344</TD> 
  284. <TD class=numeric>21.5</TD></TR> 
  285. <TR> 
  286. <TD class=numeric></TD> 
  287. <TD>Minnesota</TD> 
  288. <TD class=numeric>16</TD> 
  289. <TD class=numeric>5006</TD> 
  290. <TD class=numeric>333.7</TD> 
  291. <TD class=numeric>1523</TD> 
  292. <TD class=numeric>101.5</TD> 
  293. <TD class=numeric>3483</TD> 
  294. <TD class=numeric>232.2</TD> 
  295. <TD class=numeric>287</TD> 
  296. <TD class=numeric>19.1</TD></TR> 
  297. <TR class=alternateRow> 
  298. <TD class=numeric></TD> 
  299. <TD>New England</TD> 
  300. <TD class=numeric>16</TD> 
  301. <TD class=numeric>4882</TD> 
  302. <TD class=numeric>305.1</TD> 
  303. <TD class=numeric>1793</TD> 
  304. <TD class=numeric>112.1</TD> 
  305. <TD class=numeric>3089</TD> 
  306. <TD class=numeric>193.1</TD> 
  307. <TD class=numeric>371</TD> 
  308. <TD class=numeric>23.2</TD></TR> 
  309. <TR> 
  310. <TD class=numeric></TD> 
  311. <TD>New Orleans</TD> 
  312. <TD class=numeric>16</TD> 
  313. <TD class=numeric>5226</TD> 
  314. <TD class=numeric>326.6</TD> 
  315. <TD class=numeric>1712</TD> 
  316. <TD class=numeric>107.0</TD> 
  317. <TD class=numeric>3514</TD> 
  318. <TD class=numeric>219.6</TD> 
  319. <TD class=numeric>333</TD> 
  320. <TD class=numeric>20.8</TD></TR> 
  321. <TR class=alternateRow> 
  322. <TD class=numeric></TD> 
  323. <TD>New York Giants</TD> 
  324. <TD class=numeric>16</TD> 
  325. <TD class=numeric>5335</TD> 
  326. <TD class=numeric>333.4</TD> 
  327. <TD class=numeric>1777</TD> 
  328. <TD class=numeric>111.1</TD> 
  329. <TD class=numeric>3558</TD> 
  330. <TD class=numeric>222.4</TD> 
  331. <TD class=numeric>294</TD> 
  332. <TD class=numeric>18.4</TD></TR> 
  333. </TBODY></TABLE> 
  334. </BODY> 
  335. </HTML> 

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

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

图片精选