2011-02-25 185 views
2

我有我的網頁上的以下HTML標記,jQuery選擇問題

<div id="sig_container"> 
    <div id="layer1" class="layer ui-draggable ui-resizable ui-resizable-autohide"> 
    <div id="layer2" class="layer ui-draggable ui-resizable ui-resizable-autohide"> 
    <div id="layer3" class="layer ui-draggable ui-resizable selected ui-resizable-autohide"> 
</div> 

在這個頁面上我想選擇#sig_container格不選擇任何孩子。但是我有這樣一個問題。選擇器可以選擇一切或不選。

在此先感謝 丹尼爾

編輯:對不起我要補充,我想在容器上添加一個click事件。所以我希望事件只在點擊容器而不是孩子時觸發。

+0

這沒有意義 - 你想用容器做什麼? – flesh 2011-02-25 20:35:30

+0

$('#sig_container')應該選擇元素。什麼提醒($('#sig_container')。html());給你? – Justin808 2011-02-25 20:36:15

+0

當你選擇一個元素時,你也會將該元素的子元素作爲該對象的一部分。爲什麼這是一個問題,你得到了孩子以及父母?你想刪除父母嗎? – 2011-02-25 20:36:24

回答

7

你可以通過測試點擊事件的event.target來完成你想要的。

$('#sig_container').click(function(event) { 
    if(event.target === this) { 
     // the children were not clicked, so run your code 
    } 
}); 

這樣做的原因是,點擊事件自然泡,所以如果你點擊一個孩子,事件冒泡到sig_container並觸發其處理程序。

使用此解決方案,確保在觸發代碼之前事件的target實際上是sig_container

所以基本上:

  • thissig_container

  • event.target是實際點擊的元素

  • 如果this是一樣的event.target運行代碼

+0

+1 bah,該死的OP編輯... – 2011-02-25 20:48:40

+0

謝謝,那正是我在尋找的,並且在我編輯之前回答他的人感到抱歉。反正有+1。 – 2011-02-25 20:50:51

+1

@Matt:是的,我只是在適當的時候溜了進去。 ; O) – user113716 2011-02-25 20:51:48

1

這個選擇將選擇<div id="sig_container">

$('#sig_container') 

如果你認爲這是在選擇孩子爲好,它不是:

alert($('#sig_container').length); // alerts 1 
1
$('#sig_container') 

應該做的伎倆。如果沒有,你是否通過任何可能損壞ID的HTML?