Javascript jquery选择器帮助。除了指定的选择器之外的所有内容

Javascript jquery选择器帮助。除了指定的选择器之外的所有内容,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我可以使用以下功能打开覆盖菜单: $('.context-switch').click(function() { $(".context-switch-menu").toggle(); }); 要隐藏菜单,我希望用户能够单击“.上下文切换菜单”之外的任何区域 我正在尝试:not(),但没有成功。试试这个,我们不希望在单击元素本身时调用函数,也不希望在单击元素内部时调用函数。这就是为什么我们需要两张支票 您希望使用您单击的元素e.target $("html").cli

我可以使用以下功能打开覆盖菜单:

   $('.context-switch').click(function() {
       $(".context-switch-menu").toggle();
   });
要隐藏菜单,我希望用户能够单击“.上下文切换菜单”之外的任何区域


我正在尝试:not(),但没有成功。

试试这个,我们不希望在单击元素本身时调用函数,也不希望在单击元素内部时调用函数。这就是为什么我们需要两张支票

您希望使用您单击的元素
e.target

$("html").click(function(e){
    if( !$(e.target).is(".context-switch-menu") && 
        $(e.target).closest(".context-switch-menu").length == 0
    )
    {
       alert("CLICKED OUTSIDE");
    }
});

实时小提琴:

之所以如此困难,是因为事件冒泡

您可以尝试以下方法:

$('.context-switch').click(function(e) {
   e.stopPropagation();
   $(".context-switch-menu").toggle();
});

$(".context-switch-menu").click(function(e){
   e.stopPropagation();
});


$("body").click(function(e){
     $(".context-switch-menu").hide();
});

e.stopPropagation()
防止
单击事件冒泡到
正文
处理程序。如果没有它,任何单击
.context switch
.context switch menu
也会触发主体事件处理程序,这是您不希望的,因为它会使
的效果无效。context switch
单击一半的时间。(即,如果状态是隐藏的,然后单击显示,事件将冒泡并触发
正文
处理程序,该处理程序将再次隐藏
.context switch菜单

如果不进行测试,是否可以执行此操作?:


$('.context-switch').click(function() {
       $(".context-switch-menu").show();
   });
$(document).click(function() {
       $(".context-switch-menu").hide();
   });

与其使用
文档
'html'
'body'
也可以使用。

这里只是一个想法,基于其他人过去的建议:

$('body').click(function(e) {
     if ($(e.target).hasClass('context-switch')) {
         return;
     }

     $(".context-switch-menu").hide();
});

$('.context-switch').click(function() {
    $(".context-switch-menu").toggle();
    return false;
});
$(document).click(function(e){
    //this should give you the clicked element's id attribute
    var elem = $(e.target).attr('classname'); 
    if(elem !== 'context-switch-menu'){
        $('.context-switch-menu').slideUp('slow'); 
        //or however you want to hide it
    }
});

这将在contextmenu中的元素事件发生之前关闭contextmenu。我想您可能希望
上的
停止播放
。实际上,上下文切换菜单
。或者另外?是的,事件冒泡让我们在顶部捕捉事件,假设页面上的其他元素都没有杀死冒泡。
$(document).click(function(e){
    //this should give you the clicked element's id attribute
    var elem = $(e.target).attr('classname'); 
    if(elem !== 'context-switch-menu'){
        $('.context-switch-menu').slideUp('slow'); 
        //or however you want to hide it
    }
});