我有一个包含许多子元素的DIV,例如其他DIV,SPAN和链接。
是否有可能在JQuery选择器中指定我想在每次点击此DIV的元素(包括DIV本身)时调用函数,但所有链接(a
)除外,其中此函数不应该叫?
答案 0 :(得分:3)
而不是选择all并排除某些元素并将事件处理程序绑定到每个元素,更简单的方法(imo)将事件处理程序仅附加到div
并测试链接是否被单击(事件委托):
$('#yourDiv').click(function(event) {
if(event.target.nodeName !== 'A') {
// do your stuff
}
});
只有当链接没有任何其他元素作为子元素时,这才有效。
更强大的可能是使用.delegate
[docs]和:not
[docs]伪选择器:
更新:显然,您必须向click
添加另一个div
事件处理程序,以便能够检测div
本身的点击次数(我的测试)使用委托选择器失败):
$('#yourDiv')
.delegate(':not(a)', 'click', handler)
.click(function(event) {
if(event.target === this) { // only if the `div` was clicked
handler.apply(this, arguments);
}
});
此处,handler
是您要执行的实际事件处理程序。通过使用额外的功能,您不必重复代码。
答案 1 :(得分:2)
$('div#div_id, div#div_id *:not(a)').click(function(){
// do whatever you like here
});
答案 2 :(得分:2)
您可以使用jQuery not()
方法来实现您的目标。
e.g。
$('div, div *').not('a').click(function(){
//handle click
});
或者您可以使用:not()
选择器
e.g。
$('div, div *:not(a)').click(function(){
//handle click
});
但我个人觉得第一种方法更具可读性和更漂亮。
答案 3 :(得分:1)
您可以使用.not()
方法排除元素。