用Javascript進行簡單的Table點擊排序

來源:互聯網
上載者:User
轉自:http://www.cnblogs.com/robot/archive/2008/04/20/1161801.html

新發現一個bug:10比2小,原因是sort預設是按ascii排序的,已修複該問題.
最新DEMO下載 [修複了一些已知的問題,結合網友的回複最佳化了一些代碼,用法跟原來要樣]
html代碼[可以不看,跟html沒什麼關係.]:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><br /><html xmlns="http://www.w3.org/1999/xhtml" ><br /><head><br /><title>K2046.TableSorter</title><br /><style type="text/css"><br />body{font-size:12px;line-height:25px;}<br />tr{height:25px;}<br />th{font-size:14px;border-bottom:solid 1px #DDDDDD;background-color:#EEEEEE;}<br />td{font-size:12px;text-align:center;}<br />.SortDescCss{background-image:url(http://k2046.cn/tb/Desc.gif);background-repeat:no-repeat;background-position:right center;}<br />.SortAscCss{background-image:url(http://k2046.cn/tb/Asc.gif);background-repeat:no-repeat;background-position:right center;}<br /></style><br /><script language="javascript" type="text/javascript" src="http://files.cnblogs.com/robot/TableSorter.js"></script><br /></head><br /><body><br />代碼:new TableSorter("tb1");<br /><br />效果:點擊任意表頭可執行排序.<br /><br /><table border="0" style="border:solid 1px #DDDDDD;width:360px;" cellpadding="0" cellspacing="0" id="tb1"><br /><tr><br /><th>序號</th><br /><th>姓名</th><br /><th>工號</th><br /><th>職位</th><br /><th>性別</th><br /><th>業績</th><br /><th>報到時間</th><br /></tr><br /><tr><br /><td>1</td><br /><td>劉德華</td><br /><td>8008</td><br /><td>總裁</td><br /><td>男</td><br /><td>98</td><br /><td>2008-04-12</td><br /></tr><br /><tr><br /><td>2</td><br /><td>吳奇隆</td><br /><td>8004</td><br /><td>主管</td><br /><td>男</td><br /><td>80</td><br /><td>2008-04-16</td><br /></tr><br /><tr><br /><td>3</td><br /><td>王光良</td><br /><td>8003</td><br /><td>經理</td><br /><td>男</td><br /><td>85</td><br /><td>2008-04-15</td><br /></tr><br /><tr><br /><td>4</td><br /><td>張學友</td><br /><td>8009</td><br /><td>副總裁</td><br /><td>男</td><br /><td>90</td><br /><td>2008-04-11</td><br /></tr><br /><tr><br /><td>5</td><br /><td>張柏芝</td><br /><td>8005</td><br /><td>助理</td><br /><td>女</td><br /><td>78</td><br /><td>2008-04-13</td><br /></tr><br /><tr><br /><td>6</td><br /><td>***</td><br /><td>8001</td><br /><td>總監</td><br /><td>男</td><br /><td>60</td><br /><td>2008-04-18</td><br /></tr><br /><tr><br /><td>7</td><br /><td>陳慧琳</td><br /><td>8002</td><br /><td>試用期</td><br /><td>女</td><br /><td>85</td><br /><td>2008-04-18</td><br /></tr><br /><tr><br /><td>8</td><br /><td>張曼玉</td><br /><td>8007</td><br /><td>資深經理</td><br /><td>女</td><br /><td>82</td><br /><td>2008-04-16</td><br /></tr><br /><tr><br /><td>9</td><br /><td>周潤發</td><br /><td>8006</td><br /><td>副總裁</td><br /><td>男</td><br /><td>88</td><br /><td>2008-04-13</td><br /></tr><br /></table><br /><br /><br />代碼:new TableSorter("tb2", 0, 2, 5, 6);<br /><br />效果:點擊表頭0,2,5,6列可執行排序.<br /><br /><table border="0" style="border:solid 1px #DDDDDD;width:360px;" cellpadding="0" cellspacing="0" id="tb2"><br /><tr><br /><th>序號</th><br /><th>姓名</th><br /><th>工號</th><br /><th>職位</th><br /><th>性別</th><br /><th>業績</th><br /><th>報到時間</th><br /></tr><br /><tr><br /><td>1</td><br /><td>劉德華</td><br /><td>8008</td><br /><td>總裁</td><br /><td>男</td><br /><td>98</td><br /><td>2008-04-12</td><br /></tr><br /><tr><br /><td>2</td><br /><td>吳奇隆</td><br /><td>8004</td><br /><td>主管</td><br /><td>男</td><br /><td>80</td><br /><td>2008-04-16</td><br /></tr><br /><tr><br /><td>3</td><br /><td>王光良</td><br /><td>8003</td><br /><td>經理</td><br /><td>男</td><br /><td>85</td><br /><td>2008-04-15</td><br /></tr><br /><tr><br /><td>4</td><br /><td>張學友</td><br /><td>8009</td><br /><td>副總裁</td><br /><td>男</td><br /><td>90</td><br /><td>2008-04-11</td><br /></tr><br /><tr><br /><td>5</td><br /><td>張柏芝</td><br /><td>8005</td><br /><td>助理</td><br /><td>女</td><br /><td>78</td><br /><td>2008-04-13</td><br /></tr><br /><tr><br /><td>6</td><br /><td>***</td><br /><td>8001</td><br /><td>總監</td><br /><td>男</td><br /><td>60</td><br /><td>2008-04-18</td><br /></tr><br /><tr><br /><td>7</td><br /><td>陳慧琳</td><br /><td>8002</td><br /><td>試用期</td><br /><td>女</td><br /><td>85</td><br /><td>2008-04-18</td><br /></tr><br /><tr><br /><td>8</td><br /><td>張曼玉</td><br /><td>8007</td><br /><td>資深經理</td><br /><td>女</td><br /><td>82</td><br /><td>2008-04-16</td><br /></tr><br /><tr><br /><td>9</td><br /><td>周潤發</td><br /><td>8006</td><br /><td>副總裁</td><br /><td>男</td><br /><td>88</td><br /><td>2008-04-13</td><br /></tr><br /></table><br /><br /><br /><br />代碼:new TableSorter("tb3").OnSorted = function(c, t)<br /><br />{<br /><br />alert("table is sorted by " + c.innerHTML + " " + (t ? "Asc" : "Desc"));<br /><br />}<br /><br />效果:點擊任意表頭可執行排序並返回提示.<br /><br /><table border="0" style="border:solid 1px #DDDDDD;width:360px;" cellpadding="0" cellspacing="0" id="tb3"><br /><tr><br /><th>序號</th><br /><th>姓名</th><br /><th>工號</th><br /><th>職位</th><br /><th>性別</th><br /><th>業績</th><br /><th>報到時間</th><br /></tr><br /><tr><br /><td>1</td><br /><td>劉德華</td><br /><td>8008</td><br /><td>總裁</td><br /><td>男</td><br /><td>98</td><br /><td>2008-04-12</td><br /></tr><br /><tr><br /><td>2</td><br /><td>吳奇隆</td><br /><td>8004</td><br /><td>主管</td><br /><td>男</td><br /><td>80</td><br /><td>2008-04-16</td><br /></tr><br /><tr><br /><td>3</td><br /><td>王光良</td><br /><td>8003</td><br /><td>經理</td><br /><td>男</td><br /><td>85</td><br /><td>2008-04-15</td><br /></tr><br /><tr><br /><td>4</td><br /><td>張學友</td><br /><td>8009</td><br /><td>副總裁</td><br /><td>男</td><br /><td>90</td><br /><td>2008-04-11</td><br /></tr><br /><tr><br /><td>5</td><br /><td>張柏芝</td><br /><td>8005</td><br /><td>助理</td><br /><td>女</td><br /><td>78</td><br /><td>2008-04-13</td><br /></tr><br /><tr><br /><td>6</td><br /><td>***</td><br /><td>8001</td><br /><td>總監</td><br /><td>男</td><br /><td>60</td><br /><td>2008-04-18</td><br /></tr><br /><tr><br /><td>7</td><br /><td>陳慧琳</td><br /><td>8002</td><br /><td>試用期</td><br /><td>女</td><br /><td>85</td><br /><td>2008-04-18</td><br /></tr><br /><tr><br /><td>8</td><br /><td>張曼玉</td><br /><td>8007</td><br /><td>資深經理</td><br /><td>女</td><br /><td>82</td><br /><td>2008-04-16</td><br /></tr><br /><tr><br /><td>9</td><br /><td>周潤發</td><br /><td>8006</td><br /><td>副總裁</td><br /><td>男</td><br /><td>88</td><br /><td>2008-04-13</td><br /></tr><br /></table><br /><br /><br /><script language="javascript" type="text/javascript"><br />new TableSorter("tb1");<br />new TableSorter("tb2", 0, 2 , 5, 6);<br />new TableSorter("tb3").OnSorted = function(c, t)<br />{<br />alert("table is sorted by " + c.innerHTML + " " + (t ? "Asc" : "Desc"));<br />}<br /></script><br /></body><br /></html><br />
javascript代碼:
//Author : 狼Robot<br />//Contact : robot@k2046.cn<br />//Date : 2008-04-19<br />//Explain : 使Table可以點擊排序.<br />/*使用說明 :<br />方法1:<br />new TableSorter("tb1");<br />效果:<br />id為tb1的table的第一行任意儲存格都可以點擊進行排序.<br />方法2:<br />new TableSorter("tb1", 0, 1, 3);<br />效果:<br />id為tb1的table的第一行0,1,3儲存格可以進行點擊排序.<br />*/<br />function TableSorter(table)<br />{<br />this.Table = this.$(table);<br />if(this.Table.rows.length <= 1)<br />{<br />return;<br />}<br />this.Init(arguments);<br />}<br />//以下樣式針對錶頭的儲存格.<br />TableSorter.prototype.NormalCss = "NormalCss";//沒有執行排序時的樣式.<br />TableSorter.prototype.SortAscCss = "SortAscCss";//升序排序時的樣式.<br />TableSorter.prototype.SortDescCss = "SortDescCss";//降序排序時的樣式.<br />//初始化table的資訊和操作.<br />TableSorter.prototype.Init = function(args)<br />{<br />this.ViewState = [];<br />for(var x = 0; x < this.Table.rows[0].cells.length; x++)<br />{<br />this.ViewState[x] = false;<br />}<br />if(args.length > 1)<br />{<br />for(var x = 1; x < args.length; x++)<br />{<br />if(args[x] > this.Table.rows[0].cells.length)<br />{<br />continue;<br />}<br />else<br />{<br />this.Table.rows[0].cells[args[x]].onclick = this.GetFunction(this,"Sort",args[x]);<br />this.Table.rows[0].cells[args[x]].style.cursor = "pointer";<br />}<br />}<br />}<br />else<br />{<br />for(var x = 0; x < this.Table.rows[0].cells.length; x++)<br />{<br />this.Table.rows[0].cells[x].onclick = this.GetFunction(this,"Sort",x);<br />this.Table.rows[0].cells[x].style.cursor = "pointer";<br />}<br />}<br />}<br />//簡寫document.getElementById方法.<br />TableSorter.prototype.$ = function(element)<br />{<br />return document.getElementById(element);<br />}<br />//取得指定對象的脫殼函數.<br />TableSorter.prototype.GetFunction = function(variable,method,param)<br />{<br />return function()<br />{<br />variable[method](param);<br />}<br />}<br />//執行排序.<br />TableSorter.prototype.Sort = function(col)<br />{<br />var SortAsNumber = true;<br />for(var x = 0; x < this.Table.rows[0].cells.length; x++)<br />{<br />this.Table.rows[0].cells[x].className = this.NormalCss;<br />}<br />var Sorter = [];<br />for(var x = 1; x < this.Table.rows.length; x++)<br />{<br />Sorter[x-1] = [this.Table.rows[x].cells[col].innerHTML, x];<br />SortAsNumber = SortAsNumber && this.IsNumeric(Sorter[x-1][0]);<br />}<br />if(SortAsNumber)<br />{<br />for(var x = 0; x < Sorter.length; x++)<br />{<br />for(var y = x + 1; y < Sorter.length; y++)<br />{<br />if(parseFloat(Sorter[y][0]) < parseFloat(Sorter[x][0]))<br />{<br />var tmp = Sorter[x];<br />Sorter[x] = Sorter[y];<br />Sorter[y] = tmp;<br />}<br />}<br />}<br />}<br />else<br />{<br />Sorter.sort();<br />}<br />if(this.ViewState[col])<br />{<br />Sorter.reverse();<br />this.ViewState[col] = false;<br />this.Table.rows[0].cells[col].className = this.SortDescCss;<br />}<br />else<br />{<br />this.ViewState[col] = true;<br />this.Table.rows[0].cells[col].className = this.SortAscCss;<br />}<br />var Rank = [];<br />for(var x = 0; x < Sorter.length; x++)<br />{<br />Rank[x] = this.GetRowHtml(this.Table.rows[Sorter[x][1]]);<br />}<br />for(var x = 1; x < this.Table.rows.length; x++)<br />{<br />for(var y = 0; y < this.Table.rows[x].cells.length; y++)<br />{<br />this.Table.rows[x].cells[y].innerHTML = Rank[x-1][y];<br />}<br />}<br />this.OnSorted(this.Table.rows[0].cells[col], this.ViewState[col]);<br />}<br />//取得指定行的內容.<br />TableSorter.prototype.GetRowHtml = function(row)<br />{<br />var result = [];<br />for(var x = 0; x < row.cells.length; x++)<br />{<br />result[x] = row.cells[x].innerHTML;<br />}<br />return result;<br />}<br />TableSorter.prototype.IsNumeric = function(num)<br />{<br />return /^\d+(\.\d+)?$/.test(num);<br />}<br />//可自行實現排序後的動作.<br />TableSorter.prototype.OnSorted = function(cell, IsAsc)<br />{<br />return;<br />}<br />

代碼:new TableSorter("tb1");
效果:點擊任意表頭可執行排序.

序號 姓名 工號 職位 性別 業績 報到時間
1 劉德華 8008 總裁 98 2008-04-12
2 吳奇隆 8004 主管 80 2008-04-16
3 王光良 8003 經理 85 2008-04-15
4 張學友 8009 副總裁 90 2008-04-11
5 張柏芝 8005 助理 78 2008-04-13
6 *** 8001 總監 60 2008-04-18
7 陳慧琳 8002 試用期 85 2008-04-18
8 張曼玉 8007 資深經理 82 2008-04-16
9 周潤發 8006 副總裁 88 2008-04-13

代碼:new TableSorter("tb2", 0, 2, 5, 6);
效果:點擊表頭0,2,5,6列可執行排序.

序號 姓名 工號 職位 性別 業績 報到時間
1 劉德華 8008 總裁 98 2008-04-12
2 吳奇隆 8004 主管 80 2008-04-16
3 王光良 8003 經理 85 2008-04-15
4 張學友 8009 副總裁 90 2008-04-11
5 張柏芝 8005 助理 78 2008-04-13
6 *** 8001 總監 60 2008-04-18
7 陳慧琳 8002 試用期 85 2008-04-18
8 張曼玉 8007 資深經理 82 2008-04-16
9 周潤發 8006 副總裁 88 2008-04-13

代碼:new TableSorter("tb3").OnSorted = function(c, t)
{
alert("table is sorted by " + c.innerHTML + " " + (t ? "Asc" : "Desc"));
}
效果:點擊任意表頭可執行排序並返回提示.

序號 姓名 工號 職位 性別 業績 報到時間
1 劉德華 8008 總裁 98 2008-04-12
2 吳奇隆 8004 主管 80 2008-04-16
3 王光良 8003 經理 85 2008-04-15
4 張學友 8009 副總裁 90 2008-04-11
5 張柏芝 8005 助理 78 2008-04-13
6 *** 8001 總監 60 2008-04-18
7 陳慧琳 8002 試用期 85 2008-04-18
8 張曼玉 8007 資深經理 82 2008-04-16
9 周潤發 8006 副總裁 88 2008-04-13

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.