2012-10-02 73 views
8

我想點擊任何地方,除了當我點擊一個div和它的孩子。這是我到目前爲止已經試過,但它不工作(點擊它的孩子們仍然執行的是括號內jQuery點擊一切,但一個div和它的孩子

$('body').on('click', '* :not(#calculator)', function(e){ 

我不能使用這樣的事情:

jQuery - Select everything except a single elements and its children?

$("body > *").not("body > #elementtokeep").remove(); 

因爲.not功能是不是我可以把.on()函數內。

我怎麼能做到這一點?

+0

添加類孩子的,並檢查了嗎? – Mathlight

+0

難道你不覺得它更簡單嗎?我想排除的div相當大,而且我很可能會忘記每次添加該特定類。 –

+0

Mayby你有這個嗎? http://api.jquery.com/parent/ – Mathlight

回答

7

使用未用逗號有兩種選擇:元素本身和元素孩子

jQuery(document.body).on("click", ":not(#calculator, #calculator *)", function(e){ 
    console.log(this); 
    e.stopPropagation(); 
});​​​​​​​ 

jsFiddle

6

你可以在函數內部檢查有問題的元素:

$('body').click(function(e){ 
    if (!$(e.target).is("#calculator") || $("#calculator").has(e.target).length) { 
     // do your stuff 
    } 
}); 
+1

元素氣泡,這就是爲什麼它在#calculator元素上被觸發的原因,你必須檢查目標是#calculator還是計算器元素#itself的子元素。 – Bax

+0

@Bax你是對的,更新我的答案來檢查後代。 –

+0

是的,這真棒:)我認爲我更喜歡epascarello的答案,因爲它使我的代碼更清潔:) –

-1

而不是

$('body').on('click', '* :not(#calculator)', function(e){ 

});​ 

您可以使用(這個版本是首選,因爲它是更好的性能)

$("body").on("click", ":not(#calculator, #calculator *)", function(e){ 

});​ 

$("body :not(#calculator, #calculator *)").on("click", function(e){ 

});​ 
+0

您的回答失敗了「on」的目的。是的,它會工作,但你正在增加到頁面的許多點擊處理程序的方式。 – epascarello

+0

是的,現在糾正..謝謝! – prashanth

1

我沒有足夠的需求來添加稱道,所以我要問我的問題這裏到@epascarello。當我造幾個孩子時,A和B仍然受到影響。我不知道我錯了或不是,但我真的想得到解決方案。

jQuery(document.body).on("click", ":not(#calculator, #calculator *)", function(e){ 
    console.log(this); 
    e.stopPropagation(); 
    alert('test'); 
}); 

Live Demo

相關問題