2014-09-28 53 views
0

如何缩短此功能,所以我不需要这些if中的任何一个?缩短函数以避免语句

function showhide(element) { 
    $('body').on('click', '#'+element, function() { 
     if(element == 'export') { 
      $('.chat-export').toggle(); 
      $('.chat-settings').hide(); 
      $('.chat-users').hide(); 

     } else if(element == 'settings') { 
      $('.chat-export').hide(); 
      $('.chat-settings').toggle(); 
      $('.chat-users').hide(); 

     } else if(element == 'users') { 
      $('.chat-export').hide(); 
      $('.chat-settings').hide(); 
      $('.chat-users').toggle(); 
     } 
    }); 
} 
+0

会员总是'之开关:-) – techfoobar 2014-09-28 13:41:31

回答

3

只是这样做:

$('[class^=chat]').each(function(){ 
    if($(this).attr("class").indexOf(element) > -1){ $(this).toggle(); } 
    else { $(this).hide(); } 
}); 

PS。我的早期代码和antyrat代码的问题是,当我们隐藏所有内容时,切换工作会意外。

DEMO

+0

非常感谢!我会尽快接受你的回答:) – Erik 2014-09-28 13:50:12

+0

@ErikEdgren很高兴帮助!干杯! – 2014-09-28 13:50:46

+0

虽然有一个问题。 'toggle()似乎不适用于你的解决方案:/我只能显示元素,但不能再隐藏它。 – Erik 2014-09-28 13:51:54

4

您可以使用此regex选择片段,例如避免这种情况:

$('div:regex(class, .chat-*)').hide(); 
$('.chat-' + element).toggle(); 
+0

非常漂亮的代码,但我不断收到'未捕获的错误:语法错误,无法识别的表情:不支持的伪:regex':/ – Erik 2014-09-28 13:44:02

+1

@ErikEdgren对不起,我忘记提及这需要包含以下代码片段:http://james.padolsey.com/javascript/regex-selector-for-jquery/。看看阿米特Joki的答案,这似乎是更原生 – antyrat 2014-09-28 13:46:16

+0

谢谢。阿米特Joki的答案工作得很好,所以我会用他的:)而非常感谢您的答案。太棒了! – Erik 2014-09-28 13:49:04