2013-05-21 74 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

相关问题