2012-07-24 44 views
1

Here是Jquery庫的.toggleClass()方法的API。我不確定如何實現開關部分。開關部分是否應該導致布爾值,如果是,那麼它是否被實現或不是?請解釋.toggleClass()API中的'switch'?

因此,如果代碼是:

`$('selector').toggleClass('class-to-be-toggled' , ($(this).hasClass('white')))` 

和評估爲真,那麼.toggleClass()將執行($(this).hasClass('white')),如果計算結果爲假,那麼.toggleClass()不執行呢?

或者我誤解了switch的目的。

回答

3

如果省略該參數,類將被添加或根據任何刪除添加它目前是沒有的。如果傳遞參數,則不管元素的當前狀態如何,都將根據參數添加或刪除該類。

舉例來說,這樣的:

$(':checkbox').click(function() { 
    $(this).parent().toggleClass('selected', $(this).is(':checked')); 
}); 

非常簡單,只是寫的簡寫:

$(':checkbox').click(function() { 
    if($(this).is(':checked')) { 
     $(this).parent().addClass('selected'); 
    } else { 
     $(this).parent().removeClass('selected'); 
    } 
}); 

你可能認爲大部分的時間你會得到很好客場只

$(':checkbox').click(function() { 
    $(this).parent().toggleClass('selected'); 
}); 

這可能是這種情況,但如果有的話其他比checkbox複選框可能會干擾selected類,那麼如果你沒有傳遞一個明確指定你想要做什麼的參數,那麼你的切換會有失去同步的風險。

+0

只要我們談論寫速記的方法,爲什麼不''(this).is(「:checked」)''this.checked''? (在運行時效率更高,更容易打字和閱讀。) – nnnnnn 2012-07-24 06:54:21

+1

@nnnnnn:我們之前已經討論過這個問題。我的看法與你的觀點一致,我想是。我通常不介意jQuery往返。 'this.cssFloat'可以在某些瀏覽器中使用,而不在其他瀏覽器中使用(IE使用/使用'styleFloat'),'$(this).css('float')'可以工作。對我而言,jQuery的最大好處是不必處理不同的瀏覽器實現。在我看來,被檢查的特定屬性在主流瀏覽器中沒有出現任何這種行爲不一致的事實,這並不是一個非常有說服力的理由。 – 2012-07-24 07:33:57

+0

啊,是的,我記得你以前指出過的(我只是不記得是你,對不起)。我使用'.css()'來設置CSS屬性,但對於'.checked','.disabled'等等,我通常使用'this.checked','this.disabled'。也就是說,我知道有一些屬性可以在不需要jQuery的情況下以百分之百的信心工作。我一直在使用這些屬性很久(pre-jQuery),我甚至不需要考慮它們。 – nnnnnn 2012-07-24 07:49:51

3

開關布爾值決定是否添加或刪除類。如果switch參數爲true,則會添加該類,如果該參數爲false,則該類將被刪除。從jQuery DOC

直:

.toggleClass(className, switch) 

className - One or more class names (separated by spaces) 
    to be toggled for each element in the matched set. 
switch - A Boolean (not just truthy/falsy) value to determine 
    whether the class should be added or removed. 

甚至還有在jQuery doc page表示使用開關參數的代碼示例。

如果switch boolean根本沒有被傳遞,那麼這個類將會被添加,如果它不存在,並且它被刪除(因此它將被切換)。

+0

因此,如果switch語句的計算結果爲true,會發生什麼情況?假? – 2012-07-24 06:21:38

+0

@chrisFrisina - 我很難知道你不明白什麼。我已經在多個地方說過,如果switch參數爲true,則會添加該類,如果該參數爲false,則該類將被刪除。 – jfriend00 2012-07-24 06:23:50

+1

但如果這是真的呢? (只是開個玩笑+1) – nnnnnn 2012-07-24 06:56:27

0

如果你的第二個參數(開關)爲真,則該類否則爲false刪除