2011-08-31 87 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