帮我优化JavaScript中的if else(jQuery)

时间:2009-12-08 11:01:14

标签: javascript jquery coding-style

是否有可能以某种方式缩短此代码:

var i=GetStringFromServer('/url');
if(i){
   $('#Div1').hide();
   $('#Div2').show();
}
else{
   $('#Div1).show();
   $('#Div2).hide();
}

在C#中,我只是这样做:

bool smth=GetBool();
_el1.Visible=smth;
_el2.Visible=!smth;

是否可以模仿JavaScript中的逻辑?

更新:谢谢大家提供了很好的答案,我在询问之前偷看了自己,但是方法签名有什么困惑:

toggle(fn1, fn2);

我认为这个函数需要一些棘手的回调,但显然它足够灵活,可以处理普通的布尔值和回调。

更新2:感谢Robert和Fabien的评论,终于找到了真正的答案。基于对bool的参数求值,Toggle将始终使元素可见或不可见。

6 个答案:

答案 0 :(得分:7)

$('#Div1, #Div2').toggle(i);

答案 1 :(得分:4)

如果你给toggle一个布尔参数,它会将它应用于每个匹配的元素。来自文档:

  

根据开关切换显示每组匹配元素(true表示所有元素,false表示隐藏所有元素)。

所以在你的情况下,你想要:

$("#Div1").toggle(!i);
$("#Div2").toggle(i);

答案 2 :(得分:2)

var i=GetStringFromServer('/url');

$('#Div1').toggle(!i);
$('#Div2').toggle(i);

但是如果你这样做的话,你可能会遇到问题,因为看起来你正在使用Ajax。

答案 3 :(得分:1)

它可能很好,但如果你愿意,你可以这样做:

var i=GetStringFromServer('/url');
$('#Div1')[i  ? 'hide' : 'show']();
$('#Div2')[!i ? 'hide' : 'show']();

我认为你在空间节省或运行时方面没有太大的帮助,而且未来的代码维护者也不太清楚。

答案 4 :(得分:0)

除了其他答案,如果你不能切换 ,但需要明确地显示/隐藏:

var divs = ['#div1', '#div2'],
    j = (i ? 1 : 0)
$(divs[1 - j]).show()
$(divs[j]).hide()

答案 5 :(得分:0)

我习惯这样做:

  if($('#Div1').css("display") == "none")
     {
       $(this).show(); 
     }
     else
     {
       $(this).hide(); 
     }