2011-09-02 59 views
0

我使用jQuery 1.6,我想提高下面的代碼(即寫事半功倍):提高課堂切換

if (row.hasClass('line_odd')) { 
    row.removeClass('line_odd'); 
    row.addClass('line_even'); 
} else { 
    row.removeClass('line_even'); 
    row.addClass('line_odd'); 
} 

我怎麼能這樣做?

回答

1

假設行開始與兩個班的只有一個:

row.toggleClass("line_odd line_even") 

應該做的伎倆。

+0

這是給你的假設的方式。 – user113716

3

替換塊:

var hasOdd = row.hasClass('line_odd'); 
row.toggleClass('line_odd', !hasOdd).toggleClass('line_even', hasOdd); 
+0

不需要hasOdd變量 –

+3

@Piyush:避免調用hasClass兩次。 – Chandu

+0

有道理......! –

0

您可以使用鏈接

if (row.hasClass('line_odd')) { 
    row.removeClass('line_odd').addClass('line_even'); 

} else { 
    row.removeClass('line_even').addClass('line_odd'); 
} 
+0

是不是縮小版。可以通過.toggleClass進一步降低 –

2

我會建議使用像http://api.jquery.com/toggleClass/,例如:

row.toggleClass("line_odd") 
    .toggleClass("line_even"); 

這假定沒有行元素會同時具有line_oddline_even最初設置的類,以便它與您的代碼具有相同的效果。

+0

擊敗我! +1 – Bojangles

1

請嘗試以下

var isOdd = row.hasClass('line_odd'); 
row.toggleClass('line_odd', !isOdd); 
row.toggleClass('line_even', isOdd); 
+0

不需要isOdd變量 –

+4

@Piyush在理想的情況下,我會同意。 OP沒有指定代碼以正確的狀態啓動。考慮一下最初是否同時存在'line_odd'和'line_even'行。在這種情況下,需要'isOdd'。我同意這有點出來,但是OP沒有說明,我想確保我的簡化功能與原始樣本 – JaredPar

+0

一樣好。 –

0
row.toggleClass('line_odd', row.hasClass('line_odd')).toggleClass('line_even', 
row.hasClass('line_odd')); 

這是簡化版本,這使得使用.toggleClass非常久遠的第二個參數,當真正增加了類,如果錯誤刪除的類。

+3

只有在_already_設置時纔會添加這些類嗎?沒有第二個參數的'toggleClass'已經具有正確的行爲。 – coyotebush

+0

我修正了代碼中的拼寫錯誤。關於不需要第二個參數的第二個陳述 - 不是像$(selector).toggleClass(class,switch)那樣的語法。 –

+1

這是一種可能的語法,是的。如果沒有第二個參數,它將刪除該類,如果不存在,則添加該類。如果**'line_even'**存在,您還需要更改代碼的第一部分,以添加'line_odd'。 – coyotebush