2012-05-18 139 views
25

我想要.click不做任何事情如果用戶在div內部單擊了<p>text</p>,對於我希望div .click工作的所有其他內容。JQuery .click - 排除div內的特定元素

HTML:

<div> 
    <span>yes</span> 
    <p>text</p> 
</div> 

的Jquery:

<script> 
$(document).ready(function() { 

    $("div").click(function() { 

     alert("woohoo!"); 

    }); 

}); 
</script> 

回答

76
$("div").click(function(e) { 
     if($(e.target).is('p')){ 
      e.preventDefault(); 
      return; 
     } 
     alert("woohoo!"); 
    }); 

檢查點擊的目標。這樣你不需要綁定另一個事件。

+6

不必要的'e.preventDefault()' –

+1

很難說,沒有看到其餘的代碼。它可能需要 – mkoryak

+1

使用'return false',這與在這種情況下調用e.preventDefault()和e.stopPropagation()相同。檢查http://api.jquery.com/category/events/event-object/ – Oriol

-2
$("div > span").click(function() { 

    alert("woohoo!"); 

}); 

但是,您最好爲您的html元素提供id。

+0

它不適用於另一個孩子中的跨度,OP說「其他所有」,解釋是代碼不限於兒童。 –

+0

請在回答之前閱讀問題。 –

2
<script> 
$(document).ready(function() { 
    $("div :not(p)").click(function(event) { 
     alert("woohoo!"); 
    }); 
}); 
</script> 

這意味着你不關心文本節點作爲<div>容器的子節點。

+1

這不起作用。 – Wtower

+1

@Wowowe,是的,它的工作原理,這裏是證明http://jsfiddle.net/n983hzvn/1/ –

+0

好吧,我錯過了「......內部的......」聲明。這裏是更新,答案會相應更新:http://jsfiddle.net/n983hzvn/2/ –