我想将事件绑定到正文中的所有元素,但容器及其后代除外,并且无法使其正常工作。假设 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);
}
});
但我不明白为什么前两种方法不会产生相同的结果。