我希望能够使用jquery在body
标记上绑定一个click事件,而不是在class ='noclick'的子div中绑定。
<div>
<div>you can click here</div>
<br><br><br>
<div class='noclick'>NO ALERT</div>
</div>
这不管用
$("body:not(.noclick)").on('click', function (e) {
alert("clicked")
});
这是一个JSFiddle
4条答案
按热度按时间raogr8fs1#
在您的示例中,
:not()
pseudo class没有执行任何操作。jQuery选择器
$("body:not(.noclick)")
将选择一个不包含.noclick
类的body
元素,在您的示例中,body
元素不包含.noclick
类,这意味着它将被选中,并且无论如何,click事件将冒泡到body
元素,并且函数将被触发。通过检索
event
对象(在本例中为e.target
)的target
property,可以访问对所单击元素的引用。从那里,您可以使用
.closest()
method来确定单击的元素是否具有类.noclick
* 的祖先,或者如果当前元素具有类.noclick
,则使用 *。.closest()
method:对于集合中的每个元素,通过测试元素本身并遍历DOM树中的祖先元素,获取第一个与选择器匹配的元素。
Updated Example
ia2d9nvy2#
你所拥有的东西实际上是有效的,除了点击会使DOM冒泡,所以你需要捕捉.noclick元素上的点击并阻止它传播。
vybvopom3#
bwitn5fc4#
你也可以更恰当地指定div,你在另一个div中有一个. noclickdiv,这样就触发了div的click,如果你指定div〉div:not(. noclickdiv),它就会起作用。