如果你添加一些班列,使柱細胞和相關的頭具有相同的類名,這不是太難以利用這些其他現有的JavaScript的解決方案。
作爲一個例子,我使用這個simple JQuery sorting function並創建了this JSFiddle demo。
我修改這樣的HTML:
<html>
<table id="heading">
<tr>
<th class="name-col">Name</th>
<th class="salary-col">Salary</th>
</tr>
</table>
<table id="data">
<tr>
<td class="name-col">Fred</td>
<td class="salary-col">$12000.00</td>
</tr>
<tr>
<td class="name-col">Kevin</td>
<td class="salary-col">$191200.00</td>
</tr>
</table>
</html>
請注意,我遊戲的標題名稱和所有的細胞在該列類name-col
,和我做了薪酬頭和細胞,與同一類salary-col
。
然後我用jQuery來點擊監聽器添加到name-col
頭,其然後引發了name-col
細胞排序功能:
$('th.name-col').click(function() {
$('td.name-col').sortElements(function(a, b){
return $(a).text() > $(b).text() ? 1 : -1;
}, function(){ return this.parentNode; });
});
$('th.salary-col').click(function() {
$('td.salary-col').sortElements(function(a, b){
return $(a).text() > $(b).text() ? 1 : -1;
}, function(){ return this.parentNode; });
});
在這個例子中,sortElements
是在所提供的功能上面鏈接的簡單JQuery排序函數。我不是它的作者。
你會注意到這個腳本只會排序一次,但是,由於比較方向(>
)是硬編碼的。一個快速正髒來實現邏輯來扭轉這種方式是這樣的:
var nameAsc = false;
var salaryAsc = false;
$('th.name-col').click(function() {
$('td.name-col').sortElements(function(a, b){
if (nameAsc) {
nameAsc = false;
return $(a).text() > $(b).text() ? 1 : -1;
} else {
nameAsc = true;
return $(a).text() < $(b).text() ? 1 : -1;
}
}, function(){ return this.parentNode; });
});
$('th.salary-col').click(function() {
$('td.salary-col').sortElements(function(a, b){
if(salaryAsc) {
salaryAsc = false;
return $(a).text() > $(b).text() ? 1 : -1;
} else {
salaryAsc = true;
return $(a).text() < $(b).text() ? 1 : -1;
}
}, function(){ return this.parentNode; });
});
這裏nameAsc
和salaryAsc
布爾變量是讓您反轉排列順序的只是一個hackish的方式。如果升序,則在比較器功能中翻轉布爾值和>
的方向。這可能是一種更有效的方法,但我只是想要一個快速而骯髒的例子。
您的雙桌模型會遇到很多問題,特別是在調整列的大小時。如果數據表中單元格中的數據較長,則數據列將不再與您的標題列對齊。我強烈建議你只使用單個表格來表示標題爲和的數據。
我的HTML表:
得到一個例子,在jsfiddle.net去,用自己喜歡的方法JS沒有工作。保存並將鏈接返回到此處。你提供的起點越大,幫助你的越容易,因此你越有可能得到幫助。 – invertedSpear
這些東西爲什麼在不同的表格中?重做標記,以便有兩列三行的表格。 – 2012-09-24 21:54:42