-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

ユニバーサル セレクターの問題を回避するために、$(...).onイベントをデリゲートするために使用できます。

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

})
于 2012-06-10T13:04:28.100 に答える
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 に答える
0

もちろん正しい他の回答の下で、ドキュメント全体を非表示にしないために、「例外的な要素」がより多くをカバーする必要があることを忘れないでください。

htmlしたがって、非表示にしたくない要素の親ノードに対しても例外を作成する必要があります。これだけで、ユーザーがそれらを非表示にできなくなります。

于 2012-06-10T13:08:54.557 に答える