2014-09-28 52 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