jQuery单击外部标记

时间:2011-10-12 08:18:47

标签: jquery

我有html,例如

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

当你点击外部#main时如何在jquery上制作,但在标记体内部有一些动作?

$(":not(#main)").click({..});

不工作

7 个答案:

答案 0 :(得分:6)

你试过这个:

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

答案 1 :(得分:1)

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

})

点击http://jsfiddle.net/gwams/1/

答案 2 :(得分:0)

我建议像:

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

JS Fiddle demo

答案 3 :(得分:0)

首先,您应该将Html更改为:

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

它有两个未闭合的div标签,然后大卫的回答应该可以解决问题。

答案 4 :(得分:0)

$('body').click(function(e) {
    if (e.target.id != 'main') {
        console.log('outside main but within body');
    } else {
        console.log('within main');
    }
});

答案 5 :(得分:0)

$('body').click(function () {
   alert('clicked');
});

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

应阻止#main内的点击向下传播到body

答案 6 :(得分:0)

尝试$("body>:not(#main)").click(function(){...});

从samn修改

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

$("body>:not(#main)").live("click", function(){...});