2009-05-14 24 views
25

要素が別の要素内にあるかどうかを確認するためのJavaScriptまたはjQueryの直接的な方法はありませんか?要素がjQueryの別の要素内にあるかどうかを確認するにはどうすればよいですか?

私は要素のツリー内で乱数の段数が低くなることがわかっている要素として、$(this).parentを参照していません。擬似コードでそう

<div id="THIS_PARENT"> 
<div id="random"> 
    <div id="random"> 
    <div id="random"> 
    <div id="THIS_DIV"> 
(... close all divs ...) 

if($("div#THIS_DIV").isWithin("div#THIS_PARENT")) ... 

私はよ任意の直接的な方法が存在しない場合< div id="THIS DIV">< div id="THIS PARENT">内である場合の例として

、私はチェックしたいと思いますおそらくこれのための関数を行うが、それでも依頼する価値がある。

+0

あなたが関数 'jQuery.contains(コンテナ、子孫)'で構築使用することができます。要素はあなたがこれを行うことが文書であるかどうかを確認するには。下の私の答えを見てください。 – TLindig

答えて

44

あなたはこれを行うことができます:

if($('#THIS_DIV','#THIS_PARENT').length == 1) { 

} 

は、検索のためのspecifying a context(第二引数)とは、基本的に「#THIS_PARENTのIDを持つ要素内#THIS_DIVのIDを持つ要素を探して」と言っています。これは、jQueryを使用してこれを実行する最も賢明な方法です。

それはあなたに、より理にかなっている場合我々はまた、findを使用して、このようにそれを書くことができます:

if($('#THIS_PARENT').find('#THIS_DIV').length == 1) { 

} 

またはこのように、parentsを使用して、あなたが上向きに子供から検索する場合:

if($('#THIS_DIV').parents('#THIS_PARENT').length == 1) { 

}  

これらのいずれも正常に動作します。 lengthビットは、 "検索"の長さが0より大きいかどうかを確認するために必要です。もちろん、最初のものを使うのが最も簡単ですので、個人的にはお勧めします。

また、IDで要素を参照している場合は、セレクタの前にタグ名を付ける必要はありません(もちろん完全ですが)。速度に関しては、jQueryはネイティブのgetElementById()を内部的に使用するため、実際には役に立ちません。 div.myclass.myclassよりはるかに速く、<div>要素が特定のクラスを持つ場合にのみ、クラスで選択するときにタグ名を使用することが重要です。 jQueryを使って

+0

Prototypeライブラリを使って 'parent()'バージョンと同じようにする方法は、 "javascript"を検索してここに行きました。 'if($( 'THIS_DIV')。up( '#THIS_PARENT' )){..} ' – Izkata

16

> = 1.4(2010)あなたはこの静的メソッドではないjQueryの要素を持つDOM要素、で動作し、trueまたはfalseを返す、非常に高速な機能jQuery.contains()

を使用することができます。

jQuery.contains(container, descendant) 

例:

jQuery.contains(document.body, myElement) 
関連する問題