我遇到了这行代码,但我无法弄清楚它的含义:
$("#theAppContainer")[s > u ? "addClass" : "removeClass"]("something");
我知道第一部分是选择名为 theAppContainer 的元素,如果 s > u,第二部分评估为“addClass”,但我无法弄清楚这行代码的整体作用。
我遇到了这行代码,但我无法弄清楚它的含义:
$("#theAppContainer")[s > u ? "addClass" : "removeClass"]("something");
我知道第一部分是选择名为 theAppContainer 的元素,如果 s > u,第二部分评估为“addClass”,但我无法弄清楚这行代码的整体作用。
括号语法通过 name 获取属性的值,括号调用作为该属性值的函数。它相当于:
var container = $('#theAppContainer');
if(s > u) {
container.addClass('something');
} else {
container.removeClass('something');
}
另外,请不要写这样的代码。=)
此外,还toggleClass
需要第二个switch
参数,您可以使用它来代替:
$('#theAppContainer').toggleClass('something', s > u);
$("#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
使语句比较返回一个布尔值,
Wheres>u
是一个语句,并根据结果使用值:
STATEMENT ? IF TRUE USE THIS : IF FALSE USE THAT ;
if s > u
use 'addClass'
else use 'removeClass'
which 意味着你会得到$("#theAppContainer")["addClass"]("something");
ifs > u
和
$("#theAppContainer")["removeClass"]("something");
if s===u || s<u
which 可以用 DOT 表示法翻译成:
$("#theAppContainer").addClass("something");
或者
$("#theAppContainer").removeClass("something");
这不是最好的方法,因为您可以toggleClass()
在这种特定情况下使用方法,但任何方法都很好知道。
而且你不应该使用括号表示法是不正确的。在高级 JS 中,你会看到所有的好处。