10

当我点击任何地方时,我想做一些事情,除非我点击一个 div 并且它是孩子。这是我迄今为止尝试过的,但它不起作用(点击它的孩子仍然执行括号内的内容。

$('body').on('click', '* :not(#calculator)',  function(e){

我不能使用这样的东西:

jQuery - 选择除单个元素及其子元素之外的所有内容?

$("body > *").not("body > #elementtokeep").remove();

因为.not函数不是我可以放在.on()函数内部的东西。

我怎样才能做到这一点?

4

4 回答 4

14

使用 not 和逗号来同时拥有两个选择器:元素本身和子元素

jQuery(document.body).on("click", ":not(#calculator, #calculator *)", function(e){ 
    console.log(this); 
    e.stopPropagation(); 
});​​​​​​​

jsFiddle

于 2012-10-02T12:39:15.977 回答
7

您可以在函数内部检查有问题的元素:

$('body').click( function(e){
    if (!$(e.target).is("#calculator") || $("#calculator").has(e.target).length ) {
        // do your stuff
    }
});
于 2012-10-02T12:36:05.993 回答
1

我没有足够的要求来添加推荐,所以我需要在这里向@epascarello 提问。当我生了几个孩子时,A和B仍然受到影响。我不确定我是否错了,但我真的很想得到解决方案。

jQuery(document.body).on("click", ":not(#calculator, #calculator *)", function(e){ 
    console.log(this); 
    e.stopPropagation(); 
    alert('test');
});

现场演示

于 2013-09-12T07:42:58.583 回答
-1

代替

$('body').on('click', '* :not(#calculator)',  function(e){

});​

您可以使用(首选此版本,因为它性能更高)

$("body").on("click", ":not(#calculator, #calculator *)", function(e){ 

});​

或者

$("body :not(#calculator, #calculator *)").on("click", function(e){ 

});​
于 2012-10-02T12:56:56.940 回答