3

我已经看到如何function使用.js 来调用变量 javascript window[]()

是否可以调用变量 jQuery functions?如果是这样,怎么做?

通常,我只需要一个三元来翻转一个可见的开关,而且将许多行代码压缩成 1 会非常方便。例如,在一个$.aja() success:

if(msg.length > 0){
    $("#gridViewContainer").slideDown()
}
else{
    $("#gridViewContainer").slideUp()
}

这可能是一个不好的例子,因为 aboolean可能被传递给slide()什么,但我想在上面的链接问题中使用这个概念。

这对我不起作用:

$("#gridViewContainer")[((msg.length > 0)?'slideDown':'slideUp')]()
4

1 回答 1

6

jQuery 函数仍然只是 JavaScript 函数,因此与任何其他 JS 函数相同的规则适用于它们。

objectVar您可以按如下方式调用对象的方法:

objVar.method();
objVar["method"]();
var methodName = "method";
objVar[methodName]();

您提到的使用window[]()- 适用于全局函数的问题,因为它们本质上是window(当然,如果在浏览器中运行 JS)的属性。

对于 jQuery,您可以这样做:

var methodName = "hide";
$(someSelector)[methodName]();
$(someSelector)[anyJSExpressionThatReturnsAStringThatIsAjQueryMethod]();

编辑:我刚刚看到了新版本的问题。与操作员选择方法名称一起显示的代码行?:应该与if/else. 我自己使用过类似的代码,没有任何问题,它在Jason P 提供的小提琴中运行良好。请注意,由于您的动机似乎是为了使代码更短,您可以省略 the 中表达式中的所有括号,[]然后执行以下操作:

$("#gridViewContainer")[msg.length > 0?'slideDown':'slideUp']();

...甚至省略> 0部分,因为msg.length当非零时将是真实的:

$("#gridViewContainer")[msg.length ?'slideDown':'slideUp']();
于 2013-09-18T18:10:42.520 回答