-3

很久以前,一个朋友给我做了这个:

$(".rnd1").click(function(){
    $("*").click(function (event) {
        event.stopPropagation();
        $(this).fadeOut();
    });

    $('#random-button').hide();
    $('#recover-button').show();
});

现在我想保护一些元素(如body和#recover-button)不淡出。

4

4 回答 4

4

您可以使用该not方法来减少匹配的元素集:

$("*").not("#recover-button, body").click(function (event) {

});

您也可以使用:not选择器,但如 jQuery 文档中所述:

.not() 方法最终将为您提供比将复杂的选择器或变量推入 :not() 选择器过滤器更易读的选择。在大多数情况下,这是一个更好的选择。

附带说明一下,通用选择器的使用通常是不受欢迎的。你真的想选择 DOM 中的每一个元素吗?这不是很有效。

于 2012-06-10T12:43:09.693 回答
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();
  });
于 2012-06-10T12:42:53.317 回答
2

为避免通用选择器问题,您可以使用$(...).on委托事件:

$(body).on('click', "*:not(body, #recover_button)", function() {

})
于 2012-06-10T13:04:28.100 回答
0

在其他人的答案(当然是正确的)之下,不要忘记您的“特殊元素”应该涵盖更多,以免使整个文档变得可隐藏。

因此,您还需要为html元素的父节点设置例外,您也不想隐藏这些节点。只有这样才能防止用户无法隐藏它们。

于 2012-06-10T13:08:54.557 回答