2013-08-20 82 views
0

我有下面的代碼,它工作正常,但我覺得它很愚蠢,希望有一個更乾淨的「切換」功能或類似的,我可以使用但似乎是相關的只能看到 - 我想設置一個變量(以備後用)。jQuery切換排序順序並保存到變量

如果我想要一個應該用來對列進行排序的切換函數(並將值賦給變量),可以優化下面的這個嗎?

<table> 
<thead> 
    <tr> 
    <td>Col 1</td> 
    <td>Col 2</td> 
    <td>Col 3</td> 
    </tr> 
</thead> 
<tbody> 
    <tr> 
    <td>A</td> 
    <td>B</td> 
    <td>C</td> 
    </tr> 
    <tr> 
    <td>B</td> 
    <td>C</td> 
    <td>A</td> 
    </tr> 
</tbody> 
</table> 

而jQuery的東西:

var column; 
var order; 

$('thead th').click(function() { 

    // Get the current column clicked 
    var thisColumn = $(this).text(); 

    // Check if the column has changed 
    if(thisColumn == column) { 
    // column has not changed 

    if(order == "ascending") { 
     order = "descending"; 
    } else { 
     order = "ascending"; 
    } 
    } else { 
    // column has changed 

    column = thisColumn; 
    order = "descending"; 
    } 

    // Replace text in DIV 
    $("div").text("column=["+column+"], order=["+order+"]"); 

    // future code will use the sort order to get database 
    // stuff with Ajax 

}); 

檢查的jsfiddle這裏的代碼,http://jsfiddle.net/Psz5K/

+0

http://codereview.stackexchange.com/ – j08691

+0

而不是一個全局變量,你可以使用數據屬性,順序必須是字母數字或數字0/1而不是? –

回答

0

您可以使用.data()

$(this).data('order', 'ascending') 

而且它可以使用被獲取

var order= $(this).data('order'); 

Fiddle Demo

我覺得這是更好,因爲你不需要任何(可能)全局變量只是要記住的元素。只是做另一個DOM查詢,你有他們

+1

您沒有將更改保存到您的Fiddle演示中,因爲它與我的相同。 – DHS

+0

現在你已經改變了小提琴演示,但你爲什麼認爲這更好?它與另一個變量聲明完全相同。 – DHS