我跑进这行代码,我无法弄清它的意思是:jquery选择器之后的括号和括号是什么意思?
$("#theAppContainer")[s > u ? "addClass" : "removeClass"]("something");
我理解的第一部分被选择称为theAppContainer和第二部分中的元素的计算结果为“addClass”如果s>你,但我无法弄清楚这行代码总体上做了什么。
我跑进这行代码,我无法弄清它的意思是:jquery选择器之后的括号和括号是什么意思?
$("#theAppContainer")[s > u ? "addClass" : "removeClass"]("something");
我理解的第一部分被选择称为theAppContainer和第二部分中的元素的计算结果为“addClass”如果s>你,但我无法弄清楚这行代码总体上做了什么。
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);
我确实喜欢三元的很多,但在这种情况下,它是一种可笑的哈哈,同意! –
我不知道,我有点喜欢它。它甚至不是我见过的JQuery单线程的最疯狂的一点! [从性能角度来看],至少,它们几乎完全相同。 –
@SandyGifford:表现应该是最后考虑的立场!无论如何,我已经添加了jQuery风格的做事方式。谢谢你让我看起来:) – Ryan
$("#theAppContainer")
返回一个jquery对象。
jqueryObject["addClass"]
与jqueryObject.addClass
所以,jqueryObject["addClass"]
返回jquery的对象上的addClass方法的同义词。
然后您使用("something")
将参数传入并执行该方法。
所以你基本上做
var myJqueryObject = $("#theAppContainer");
if(s > u) {
myJqueryObject.addClass("something");
}
else {
myJqueryObject.removeClass("something");
}
方括号符号。
$('#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中,你会看到所有的好处。
如果你在谈论我的答案,我没有说过从不使用括号表示法。在这种情况下,这只是一个愚蠢的选择。 – Ryan
它是一个三元运算符,就像一个if/else,所以如果's'大于'u',那么选择addClass等。 – adeneo
作为旁注,应该注意的是toggleClass有一个开关,所以你可以只是做'$(“#theAppContainer”)。toggleClass('something',s> u);' – adeneo