jQuery点击除div之外的所有东西,它是孩子们

时间:2012-10-02 12:32:24

标签: javascript jquery

当我点击任何地方时,我想做点什么,除非我点击一个div而它是孩子。这是我到目前为止所尝试的,但它不起作用(点击它的孩子仍然执行括号内的内容。

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

我不能使用这样的东西:

jQuery - Select everything except a single elements and its children?

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

因为.not函数不能放在.on()函数中。

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:9)

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

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

jsFiddle

答案 1 :(得分:6)

您可以在函数内部检查相关元素:

$('body').click( function(e){
    if (!$(e.target).is("#calculator") || $("#calculator").has(e.target).length ) {
        // do your stuff
    }
});

答案 2 :(得分:1)

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

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

Live Demo

答案 3 :(得分:-1)

而不是

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

});​

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

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

});​

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

});​