$(“*”)有例外吗?

时间:2012-06-10 12:40:31

标签: javascript jquery

很久以前,一位朋友为我做了这件事:

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

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

现在我想保护一些元素(比如body和#recovery-button)逐渐淡出。

4 个答案:

答案 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以及您不希望隐藏的元素的父节点创建例外。只有这样才能防止用户无法隐藏它们。