I've been shown如何使用function
调用变量javascript window[]()
。
是否可以调用变量jQuery function
?如果是这样,怎么样?
通常,我只需要三元素来翻转可见开关,将许多代码行刷成1会非常方便。例如,在$.aja()
success
内部:
if(msg.length > 0){
$("#gridViewContainer").slideDown()
}
else{
$("#gridViewContainer").slideUp()
}
这可能是一个不好的例子,因为boolean
可能会传递给slide()
或其他什么,但我想在上面的链接问题中使用这个概念。
这对我不起作用:
$("#gridViewContainer")[((msg.length > 0)?'slideDown':'slideUp')]()
答案 0 :(得分: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
具有相同的效果。我自己使用过类似的代码没有任何问题,它在the fiddle that Jason P provided中运行良好。请注意,由于您的动机似乎是关于缩短代码,您可以省略[]
中表达式中的所有括号,并执行此操作:
$("#gridViewContainer")[msg.length > 0?'slideDown':'slideUp']();
...或者甚至省略> 0
部分,因为msg.length
非零时将是真实的:
$("#gridViewContainer")[msg.length ?'slideDown':'slideUp']();