是否有可能以某种方式缩短此代码:
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将始终使元素可见或不可见。
答案 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();
}