2017-05-11 102 views
0

我正在實現一個下拉菜單。我想隱藏菜單,如果點擊其他地方。我試過使用jquery.not,但我觀察到jquery不選擇返回所有內容

$('div').not('.nav-toggle').hide() 

隱藏所有包括與類nav-toggle的div。難道我做錯了什麼?

+2

請發表[MCVE。一行代碼不足以幫助我們。 – j08691

+2

你確定'.nav-toggle'元素不包含在'div'中嗎?它的父母很可能被隱藏,這意味着它也會被隱藏起來。 –

+0

你的代碼應該隱藏沒有類'.nav-toggle'的任何'div',如果它包含一個孩子,那麼它應該隱藏起來......這應該做到這一點:'$('。nav-toggle') .hide();'或者如果該元素稍後被附加,那麼:'$(document).find('。nav-toggle',function(){$(this).hide()});'if you only有一個菜單... –

回答

0

Mike McCaughan的評論可能是對的。你有容器DIV也被這個隱藏。

你應該給所有的DIV你想隱藏一個普通的類,我在下面調用newclass。然後,你可以這樣做:

$('.newclass:not(.nav-toggle)').hide(); 

這隱藏了所有不同之處在於還.nav-toggle的那些的.newclass元素。

0

您的代碼應該隱藏不具備類.nav撥動任何格...

這應該做的伎倆:

$('.nav-toggle').hide(); 

,或者該元素後來安裝的DOM,則:

$(document).find('.nav-toggle', function(){ 
    $(this).hide(); 
}); 

如果你只有一個,如果你有一個以上的元素

$('.nav-toggle').each(function(){ 
    $(this).hide(); 
}); 

$(document).find('.nav-toggle').each(function(){ 
    $(this).hide(); 
}); 

希望它能幫助。

+0

爲什麼它連接到DOM時很重要? '$(document).find(selector)'和'$(selector)'之間沒有區別。 – Barmar

+0

你不需要'.each' - 像.hide()這樣的修改函數自動處理所有匹配的元素。 – Barmar

0

試試這個:

$(document).click(function() { 
    $('.nav-toggle').hide() 
}); 

$(".menu_show").click(function(e) { 
    $('.nav-toggle').show() 
    e.stopPropagation(); 
    return false;     
});