2014-09-24 44 views
1

有了这个简单的例子..如果语句没有重复选择器?

if ($('.target').is(':hidden')) { 
    $('.target').show(); 
} else { 
    $('.target').hide(); 
} 

我很好奇,如果它可以被优化,也许是这样的:

if ($('.target').is(':hidden')) { 
    .show(); 
} else { 
    .hide(); 
} 

或$(本)..

if ($('.target').is(':hidden')) { 
    $(this).show(); 
} else { 
    $(this).hide(); 
} 

不一定严格相关的这个例子,我知道我可以使用切换.. T他只是最简单的if/else例子,我认为它可以用作例子。

回答

2

当然,具有可变

var element = $('.target'); 

if (element.is(':hidden')) { 
    element.show(); 
} else { 
    element.hide(); 
} 

和jQuery有一个漂亮的toggle()方法做同样的事情

$('.target').toggle(); 

走向深水区的,你也可以做这样的东西

(function(el) { 
    el[el.is(':hidden')?'show':'hide'](); 
})($('.target')); 

还有其他一些方法

+0

IIRC这是被称为'caching'对象,对不对? – 2014-09-24 18:53:35

+0

@SterlingArcher - 当然,让我们这样说吧? – adeneo 2014-09-24 18:58:04

+0

我猜show hide是一个不好的例子,但它只是一个if else语句的简单例子,正如我所提到的。不一定与切换有关。谢谢。 – davidcondrey 2014-09-24 19:02:57

1

这两者都不适合你。您必须首先将目标另存为变量。

var $target = $('.target'); 
if ($target.is(':hidden')) { 
    $target.show(); 
} else { 
    $target.hide(); 
} 

如果你真的想保持的东西短,试试这个:

var $target = $('.target'); 
$target[$target.is(':hidden') ? 'show' : 'hide'](); 

但实际上,仅仅使用jQuery的toggle方法。

$('.target').toggle(); 
0

在你的例子中,你只是在显示和隐藏一个元素之间进行切换。 JQuery有一个方法。它只是叫.toggle()--- http://api.jquery.com/toggle/

所以,如果你只是想显示和隐藏的东西,你可以说

$('.target').toggle(); 

另外,如果有涉及更多的逻辑,这是有利的,每当您将选择器包装到$中时,缓存您的jQuery变量,您将重新包装该元素或重新遍历DOM。

所以:

var target = $('.target'); 
if(target.is(':hidden')) { 
    target.show(); 
} else { 
    target.hide(); 
}