コンテナとその子孫以外のボディ内のすべての要素にイベントをバインドしたいのですが、うまく動作しません。html マークアップが次のようであるとしましょう:
<div class="myDiv">
<div>
<label>Click here (should not alert)</label>
</div>
</div>
<label>Click here (should alert)</label>
私は最初に試しました:
$("body, body *").not(".myDiv, .myDiv *").on("click", function(e) {
e.stopPropagation();
alert(e.target);
});
ただし、アラートは両方のラベルで発生します(ここでフィドル)。私は次のように同じ結果を得ました:
$("body, body *").on("click", ":not(.myDiv)", function(e) {
e.stopPropagation();
alert(e.target);
});
私は私が望むものを達成することができました(ここでフィドル):
$("body, body *").on("click", function(e) {
if ($(e.target).parents(".myDiv, .myDiv *").length == 0) {
e.stopPropagation();
alert(e.target);
}
});
しかし、前の 2 つの方法で同じ結果が得られない理由がわかりません。