2013-05-21 79 views
5

我跑進這行代碼,我無法弄清它的意思是:jquery選擇器之後的括號和括號是什麼意思?

$("#theAppContainer")[s > u ? "addClass" : "removeClass"]("something"); 

我理解的第一部分被選擇稱爲theAppContainer和第二部分中的元素的計算結果爲「addClass」如果s>你,但我無法弄清楚這行代碼總體上做了什麼。

+1

它是一個三元運算符,就像一個if/else,所以如果's'大於'u',那麼選擇addClass等。 – adeneo

+3

作爲旁註,應該注意的是toggleClass有一個開關,所以你可以只是做'$(「#theAppContainer」)。toggleClass('something',s> u);' – adeneo

回答

13

The bracket syntax gets the value of a property by name,和括號調用是屬性值的功能。它相當於:

var container = $('#theAppContainer'); 

if(s > u) { 
    container.addClass('something'); 
} else { 
    container.removeClass('something'); 
} 

另外,請不要寫這樣的代碼。 =)

而且還​​需要一秒鐘switch說法,您可以改用:

$('#theAppContainer').toggleClass('something', s > u); 
+0

我確實喜歡三元的很多,但在這種情況下,它是一種可笑的哈哈,同意! –

+0

我不知道,我有點喜歡它。它甚至不是我見過的JQuery單線程的最瘋狂的一點! [從性能角度來看],至少,它們幾乎完全相同。 –

+1

@SandyGifford:表現應該是最後考慮的立場!無論如何,我已經添加了jQuery風格的做事方式。謝謝你讓我看起來:) – Ryan

5

$("#theAppContainer")返回一個jquery對象。

jqueryObject["addClass"]jqueryObject.addClass

所以,jqueryObject["addClass"]返回jquery的對象上的addClass方法的同義詞。

然後您使用("something")將參數傳入並執行該方法。

所以你基本上做

var myJqueryObject = $("#theAppContainer"); 
if(s > u) { 
    myJqueryObject.addClass("something"); 
} 
else { 
    myJqueryObject.removeClass("something"); 
} 
1

方括號符號。

$('#element')['hide'](700)

符號:

$('#element').hide(700)

其他的事情(?:)被稱爲ternary operator

,彰顯個性比較返回一個布爾值,
s>u是一個語句,並根據結果值用於:

STATEMENT ? IF TRUE USE THIS : IF FALSE USE THAT ;

如果s > u使用'addClass'其他使用'removeClass'
這意味着如果您使用的是s > u$("#theAppContainer")["removeClass"]("something");如果您將獲得$("#theAppContainer")["addClass"]("something"); if s===u || s<u
可以用點表示在翻譯:

$("#theAppContainer").addClass("something"); 

$("#theAppContainer").removeClass("something"); 

這不是做的最好的方法,因爲你可以在特定情況下使用toggleClass()方法,但任何這是很好的知道。
而且不應該使用括號表示法。在高級JS中,你會看到所有的好處。

+0

如果你在談論我的答案,我沒有說過從不使用括號表示法。在這種情況下,這只是一個愚蠢的選擇。 – Ryan

相關問題