jQuery单击外部标记

jQuery单击外部标记,jquery,Jquery,例如,我有html <body><div id="main"><p>some text</p></div></div></div></body> 不工作 $('body').click(function(e){ //if click inside #main if($(e.target).parents('#main').length || $(e.target).is('#main')){

例如,我有html

<body><div id="main"><p>some text</p></div></div></div></body>
不工作

$('body').click(function(e){
  //if click inside #main
  if($(e.target).parents('#main').length || $(e.target).is('#main')){
  ...
  }
  else{
    //if not clicked inside #main
  }

})

检查这里

我建议如下:

$('body').click(
    function(e){
        if ($(e.target).is('#main') || $(e.target).closest('#main').length){
            // main was clicked
        }
        else {
            // something else was clicked
        }
    });
.

您是否尝试过:

    $("body").children().filter(":not(#main)").click(function(){...});

首先,应将Html更改为:

<body><div id="main"><p>some text</p></div></body>
一些文本

它有两个未关闭的div标签,然后David的答案就可以了

$('body').click(function(e) {
    if (e.target.id != 'main') {
        console.log('outside main but within body');
    } else {
        console.log('within main');
    }
});
应停止在
#main
内的单击以向下传播到
正文

尝试
$(“正文>:非(#main)”)。单击(函数(){…)

修改自samn

如果您需要实时版本,只需更改为

$(“body>:not(#main)”).live(“单击”,function(){…})

这比我自己的建议要好得多(更简洁明了)…+1!=)也可以写一行$(“body>:not(#main)”)。单击(function(){…});
$('body').click(function(e) {
    if (e.target.id != 'main') {
        console.log('outside main but within body');
    } else {
        console.log('within main');
    }
});
$('body').click(function () {
   alert('clicked');
});

$('#main').click(function (event) {
   event.stopPropagation();
});