当我点击任何地方时,我想做点什么,除非我点击一个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()
函数中。
我怎样才能做到这一点?
答案 0 :(得分:9)
不使用逗号来同时拥有两个选择器:元素本身和子元素
jQuery(document.body).on("click", ":not(#calculator, #calculator *)", function(e){
console.log(this);
e.stopPropagation();
});
答案 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');
});
答案 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){
});