2010-12-02 44 views
0

我有一個單擊事件和if語句,如下所示。Jquery - 選擇一個元素和其中的任何東西

if (!$(e.target).is("textarea.textobject, div.texteditor")) 
{ 
    // do stuff 
} 

它的工作原理,但問題是下面顯示的div。當我點擊div中的span或table時,它不起作用。我試過(div.texteditor> *),但不起作用。

<div class="texteditor"> 
    <span>1</span> 
    <table> 
     <tr><td></td></tr> 
    </table> 
</div> 

所以基本上我想能夠選擇div.texteditor,它包含了它裏面的所有東西。有沒有人知道這個解決方案?我敢肯定,我失去了一些東西..

+0

你能告訴這個地方`if`語句運行? – 2010-12-02 11:55:41

回答

0

如果事件處理程序是在<div>本身,只是用this代替e.target(這可能是一個孩子),像這樣:

if (!$(this).is("textarea.textobject, div.texteditor")) 
{ 
    // do stuff 
} 

。 ..如果不是你要檢查目標是內部的2種選擇類型之一的任何地方,使用.closest().length,像這樣:

if ($(e.target).closest("textarea.textobject, div.texteditor").length == 0) 
{ 
    // do stuff 
} 

由於.closest()作品上目前的元素父母,在這裏很方便。

+0

它需要有e.target。其實我自己可能已經解決了。 這似乎工作。 if(!$(e.target).is(「textarea.textobject,div.texteditor,div.texteditor *」)) 它選擇div.texteditor,然後div.texteditor以及其中的任何內容。 – tmutton 2010-12-02 12:01:37

+0

@codemonkey - 可以工作,查看上面的`.closest()`解決方案,但它會更有效地做同樣的事情:) – 2010-12-02 12:02:30

0

我不知道,但你有沒有嘗試創建另一個事件分配給div內的元素? 喜歡的東西:

if ($(e.target).is("span") && $(e.target).parent("div.texteditor")) 
{ 
    // do stuff 
} 

我不知道,如果它的工作原理,但它的主意了!

我希望它能幫助你。 ^^

如果要適用於所有的孩子,這可能是工作:

if ($(e.target).parent("div.texteditor")) 
{ 
    // do stuff 
} 
相關問題