很久以前,一位朋友为我做了这件事:
$(".rnd1").click(function(){
$("*").click(function (event) {
event.stopPropagation();
$(this).fadeOut();
});
$('#random-button').hide();
$('#recover-button').show();
});
现在我想保护一些元素(比如body和#recovery-button)逐渐淡出。
答案 0 :(得分:4)
您可以使用not
方法减少匹配的元素集:
$("*").not("#recover-button, body").click(function (event) {
});
您也可以使用:not
选择器,但正如jQuery docs中所述:
.not()方法最终会为您提供更多可读性 选择而不是将复杂的选择器或变量推送到:not() 选择器过滤器在大多数情况下,这是一个更好的选择。
另外,通常选择使用通用选择器是不受欢迎的。你真的想选择DOM中的每一个元素吗?效率不高。
答案 1 :(得分:2)
尝试此操作并取消选择html元素
$(".rnd1").click(function(){
$("*:not('body'):not('#recover_button'):not(html)").click(function (event) {
event.stopPropagation();
$(this).fadeOut();
});
$('#random-button').hide();
$('#recover-button').show();
});
答案 2 :(得分:2)
要避免通用选择器问题,您可以使用$(...).on
委派事件:
$(body).on('click', "*:not(body, #recover_button)", function() {
})
答案 3 :(得分:0)
在其他人的答案之下,当然是正确的,不要忘记你的“特殊元素”应该涵盖更多,以免使整个文件可隐藏。
因此,您还需要为html
以及您不希望隐藏的元素的父节点创建例外。只有这样才能防止用户无法隐藏它们。