我有一个DIV包含许多子元素,例如,其他DIV,SPAN和链接。“在JQuery中选择全部,不包括”选择器
是否有可能在JQuery选择器中指定,只要点击此DIV的一个元素(包括DIV本身),除了所有链接(a
)之外,我想调用一个函数,而该函数不应该是叫什么名字?
我有一个DIV包含许多子元素,例如,其他DIV,SPAN和链接。“在JQuery中选择全部,不包括”选择器
是否有可能在JQuery选择器中指定,只要点击此DIV的一个元素(包括DIV本身),除了所有链接(a
)之外,我想调用一个函数,而该函数不应该是叫什么名字?
而是选择所有,但不包括一些元素,并结合事件处理他们每个人的,更简单的方法的(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
是您想要执行的实际事件处理程序。通过使用额外的功能,您不必重复代码。
您可以使用.not()
方法来排除元素。
您可以使用jQuery not()
方法来实现您正在查找的内容。
例如
$('div, div *').not('a').click(function(){
//handle click
});
交替您可以使用:not()
选择
例如
$('div, div *:not(a)').click(function(){
//handle click
});
但我个人觉得第一种方法更具可读性和更漂亮。
这不包括'div'本身。修改了 –
以包含div,我错过了他的部分问题 – AshHeskes
look http://stackoverflow.com/questions/1730609/using-jquery-not-selector-to-exclude-elements-with-particular-children –