5

我遇到了这行代码,但我无法弄清楚它的含义:

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

我知道第一部分是选择名为 theAppContainer 的元素,如果 s > u,第二部分评估为“addClass”,但我无法弄清楚这行代码的整体作用。

4

3 回答 3

13

括号语法通过 name 获取属性的值,括号调用作为该属性值的函数。它相当于:

var container = $('#theAppContainer');

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

另外,请不要写这样的代码。=)

此外,还toggleClass需要第二个switch参数,您可以使用它来代替:

$('#theAppContainer').toggleClass('something', s > u);
于 2013-05-21T02:04:20.650 回答
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");
}
于 2013-05-21T02:03:46.910 回答
1

方括号表示法。

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

符号:

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

另一件事(?:)被称为ternary operator

使语句比较返回一个布尔值,
Wheres>u是一个语句,并根据结果使用值:

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

if s > uuse '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 中,你会看到所有的好处。

于 2013-05-21T02:05:44.683 回答