用于方法调用的 Javascript 三元运算符

Posted

技术标签:

【中文标题】用于方法调用的 Javascript 三元运算符【英文标题】:Javascript ternary operators for method calls 【发布时间】:2013-06-29 07:49:18 【问题描述】:

我希望喜欢能够做到这一点:

var b = $(this).is(':checked')
$('.perspective-col'). (b) ? show() : hide()

而不是

var b = $(this).is(':checked')
if(b)     
    $('.perspective-col').show() 
 else 
    $('.perspective-col').hide()

我是不是希望太多了?还是有一些我还没有找到的美妙的 javascript 语法?还是我认为到目前为止 JQuery 中不存在这样的事情是正确的? (我使用的是 JQuery 1.9.0)

【问题讨论】:

另一个与当前答案不同的选项是使用:$.fn[b ? "show" : "hide"].call($(".perspective-col")) 【参考方案1】:

你可以用这个:

var b = $(this).is(':checked')
$('.perspective-col')[b ? 'show' : 'hide']()

您可以通过将字符串传递到括号[] 来调用jQuery 函数。只需在里面插入一个条件来决定你传递哪个字符串!

一般来说,

<any expression>.property

相当于:

<any expression>['property']

不同之处在于,您可以将括号中的文字'property' 替换为计算属性名称的表达式。 jQuery 方法只是其值恰好是函数的属性。

但我实际上讨厌这种做法。你也可以使用jQuery .toggle()

【讨论】:

也许注意到这行得通,因为&lt;expression&gt;.name 等价于&lt;expression&gt;['name']。方法调用或 jQuery 没有什么特别之处。 如果有错误解释(或更好的表达方式),请随时编辑我的答案! :)【参考方案2】:

jQuery 有一个方法可以做你想做的事,叫做toggle():

$('.perspective-col').toggle(b);

【讨论】:

哇。是时候重写我在过去一周写的一半 javascript...xD 谢谢! 有了一个好的 IDE,你也许可以使用正则表达式替换来重写它们。 仅供参考,我正在编写的方法尝试根据复选框值显示()具有 class="perspective" 的所有列,而不考虑依赖于单个列的其他复选框,因此 toggle() 是'不正是我现在正在寻找的。​​span> 我的回答是基于您在问题中编写的代码,其中有一个 b 用于与选择器匹配的所有元素。同样的事情也适用于 Karl-André 的回答。如果不同的元素需要进行不同的切换,可以使用.each(),获取相应的b,然后使用$(this).toggle(b) 很抱歉没有包含更多关于我之前意图的信息。很酷,所以:$('some-element').each(function() var b = $(this).is(':checked'); $(this).toggle(b); ) Clean。

以上是关于用于方法调用的 Javascript 三元运算符的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript(第四天)

jquery实现全选取消反选加JavaScript三元运算(三种法法实现反选)

三元运算符如何比较 JavaScript 中的字符和数字?

三元运算符求三个数最大值

Javascript

JS使用三元运算符判断三个数中最大的数