2011-08-31 65 views
3

我有一个DIV包含许多子元素,例如,其他DIV,SPAN和链接。“在JQuery中选择全部,不包括”选择器

是否有可能在JQuery选择器中指定,只要点击此DIV的一个元素(包括DIV本身),除了所有链接(a)之外,我想调用一个函数,而该函数不应该是叫什么名字?

+0

look http://stackoverflow.com/questions/1730609/using-jquery-not-selector-to-exclude-elements-with-particular-children –

回答

3

而是选择所有,但不包括一些元素,并结合事件处理他们每个人的,更简单的方法的(IMO)将事件处理程序附加只是为了div和测试是否链接被点击或没有(事件代表团):

$('#yourDiv').click(function(event) { 
    if(event.target.nodeName !== 'A') { 
     // do your stuff 
    } 
}); 

如果链接没有任何其他元素作为孩子这只会工作。

更强大可能会使用.delegate[docs]:not[docs]伪选择:

$( '#yourDiv')委托( ':不(一)', '点击',函数(事件){ //做你的东西 });

更新:显然,你必须到另一个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是您想要执行的实际事件处理程序。通过使用额外的功能,您不必重复代码。

+0

+1这是一个很好的解决方案。 – Paulpro

+0

最适合我的解决方案,谢谢。 – xsl

+0

@xsl:不客气:) –

1

您可以使用.not()方法来排除元素。

2
$('div#div_id, div#div_id *:not(a)').click(function(){ 
    // do whatever you like here 
}); 

Demo

+0

'div'永远不是'a';) –

+0

@费利克斯·克林:我已经修好了! :) – Shef

+0

是的,我猜对了...有时我太快评论:D –

2

您可以使用jQuery not()方法来实现您正在查找的内容。

例如

$('div, div *').not('a').click(function(){ 
    //handle click 
}); 

交替您可以使用:not()选择

例如

$('div, div *:not(a)').click(function(){ 
    //handle click 
}); 

但我个人觉得第一种方法更具可读性和更漂亮。

+0

这不包括'div'本身。修改了 –

+0

以包含div,我错过了他的部分问题 – AshHeskes