Javascript body:not(div.class)不';行不通
我对jQuery有一个问题,我做了一个按钮来打开/关闭菜单,它就可以工作了。但是我想允许点击身体上的任何地方来关闭菜单。因此,当我们在Javascript body:not(div.class)不';行不通,javascript,jquery,Javascript,Jquery,我对jQuery有一个问题,我做了一个按钮来打开/关闭菜单,它就可以工作了。但是我想允许点击身体上的任何地方来关闭菜单。因此,当我们在.burger外单击时,我想关闭菜单 所以我做了这个: 编辑:这是我菜单的全部代码 var count = 0; function menu(){ $('.burger').click(function(){ if (count==0) { $('.navigation').css({'display':'block', 'opacity':'1'})
.burger
外单击时,我想关闭菜单
所以我做了这个:
编辑:这是我菜单的全部代码
var count = 0;
function menu(){
$('.burger').click(function(){
if (count==0) {
$('.navigation').css({'display':'block', 'opacity':'1'});
count=1;
}else{
$('.navigation').css({'display':'none', 'opacity':'0'});
count=0;
}
});
}
menu();
if(count == 1){
$("body *:not(.burger)").click(function(event){
$('.navigation').css({'display':'none', 'opacity':'0'});
count=0;
});
}
但当我点击.burger时,它会显示警报。
这样,当我单击.burger时,我的菜单会出现并消失,但当我在.burger之外单击时,没有任何效果您正在选择所有与
div.burger
不匹配的身体标签。这将简单地选择body标签(因为它不匹配div.burger
)
要匹配body中没有标记.burger
的所有元素,请尝试以下操作:
$("body *:not(.burger)").click(function(){alert('ok');
$('.nav').css({"display":"none"});
});
同样,如果只想匹配没有类.burger
的div,请使用div:not(.burger)
(这里甚至不需要body,因为div不应该出现在标记之外):
$(“body*:not(.burger)”)。单击(function(){
警报(“匹配体*:非(.burger)”;
});
$(“div:not(.burger)”)。单击(function(){
警报(“匹配的div:not(.burger)”;
});代码>
div
{
宽度:50px;
高度:50px;
浮动:左;
背景颜色:橙色;
保证金:5px;
}
汉堡
不是汉堡
您选择的所有身体标签都与div.burger
不匹配。这将简单地选择body标签(因为它不匹配div.burger
)
要匹配body中没有标记.burger
的所有元素,请尝试以下操作:
$("body *:not(.burger)").click(function(){alert('ok');
$('.nav').css({"display":"none"});
});
同样,如果只想匹配没有类.burger
的div,请使用div:not(.burger)
(这里甚至不需要body,因为div不应该出现在标记之外):
$(“body*:not(.burger)”)。单击(function(){
警报(“匹配体*:非(.burger)”;
});
$(“div:not(.burger)”)。单击(function(){
警报(“匹配的div:not(.burger)”;
});代码>
div
{
宽度:50px;
高度:50px;
浮动:左;
背景颜色:橙色;
保证金:5px;
}
汉堡
不是汉堡
我将使用委托事件绑定来过滤冒泡的事件,而不是对不是汉堡的所有内容进行绑定
$('.burger')。在('click',函数(e)上{
e、 停止传播();
$(“#菜单”).toggleClass('hide');
});
$(document.body)。在('click',':not(.burger')上,函数(e){
$('#menu').addClass('hide');
});代码>
.burger{
显示:内联块;
背景颜色:浅蓝色;
}
.隐藏{
不透明度:0;
}
身体{
背景颜色:灰色;
最小宽度:1920像素;
最小高度:1080px;
}
汉堡图标
我将使用委托事件绑定来过滤冒泡的事件,而不是对所有不是汉堡的东西进行绑定
$('.burger')。在('click',函数(e)上{
e、 停止传播();
$(“#菜单”).toggleClass('hide');
});
$(document.body)。在('click',':not(.burger')上,函数(e){
$('#menu').addClass('hide');
});代码>
.burger{
显示:内联块;
背景颜色:浅蓝色;
}
.隐藏{
不透明度:0;
}
身体{
背景颜色:灰色;
最小宽度:1920像素;
最小高度:1080px;
}
汉堡图标
使用函数,您可以实现这一点。
$(“.body*”)。不是(“div.burger”)。单击(函数(){
$('.nav').css({“display”:“none”});
});代码>
.burger{
宽度:200px;
高度:200px;
背景色:rgba(255255,1);
位置:绝对位置;
顶部:25px;
左:30px;
z指数:9999;
}
.身体{
宽度:100%;
身高:100%;
}
.导航{
宽度:100%;
身高:100%;
背景色:rgba(0,0,0,2);
位置:绝对位置;
排名:0;
左:0;
z指数:999;
}
汉堡店(点一下什么都没发生)
单击此覆盖div以隐藏它!
使用函数,您可以实现这一点。
$(“.body*”)。不是(“div.burger”)。单击(函数(){
$('.nav').css({“display”:“none”});
});代码>
.burger{
宽度:200px;
高度:200px;
背景色:rgba(255255,1);
位置:绝对位置;
顶部:25px;
左:30px;
z指数:9999;
}
.身体{
宽度:100%;
身高:100%;
}
.导航{
宽度:100%;
身高:100%;
背景色:rgba(0,0,0,2);
位置:绝对位置;
排名:0;
左:0;
z指数:999;
}
汉堡店(点一下什么都没发生)
单击此覆盖div以隐藏它!
另一个选项是使用jQuery的.not()
:$(“body*”)。not(“div.burger”)
谢谢,但没有解决方案有效。。第一,当我点击时,做完全相同的事情。burger我有警报,第二个工作,但我所有的div都有宽度:90%和边距:auto,所以当我点击div时,它不工作。not():$(“body*”)。not(“div.burger”))与第一个结果相同solution@CoraLie您在$('.nav
。请确保已将其包含在源代码中。代码段中的代码清楚地显示了这些选择器的工作方式。您的源代码中可能存在另一个问题,我无法调试,因为您需要发布更多信息。好的,这是我的所有源代码变量计数=0;函数菜单(){$('.burger')。单击(函数(){if(count==0){$('.nav').css({'display':'block','opacity':'1'});count=1;}else{$('.nav').css({'display':'none','opacity':'0'});count=0;}菜单();if(count==1){$('body*:not(.burger)”。点击(函数(事件){$('nav').css({'display':'none','opacacity':'0'});count=0;});}像这样,我的菜单