2013-08-31 13 views
5

特定の要素の最も深い子孫レベルを効率的にカウントする方法はありますか?要素のDOM階層レベルを取得する(カウントの子孫レベル)

例:

<div id="wrapper"> 
    <ul> 
    <li class="first">first</li> 
    <li class="active">second</li> 
    <li class="last"><a>third</a></li> 
    </ul> 
</div> 

#wrapper最深のチェーンはこのように書きますので4の子孫レベルを返す必要があります:#wrapper > ul > li > a。それは子を持たないとli.last2ためli.last > aで返す必要がありますので

li.first1を返す必要があります。

私は$('#wrapper').find(*)を実行し、すべての結果を反復することができます。これは、多くの子孫を持つ要素、特にbody要素の場合、非常に遅くなるはずです。 http://jsbin.com/ixeWaja/1/edit

任意のアイデアを効率的にこの問題を解決する方法:ここで

は実験のためのスタートですか!

+0

_ _ _efficint_を定義する "効率的な方法はあります" が、基本的には、**はありません。** – gdoron

+3

もし '#wrapper> UL> LI> A'である3(すなわち、'#ラッパーは3レベルの子孫を持ちます)、 'li.first'は0で、' li.last'は1であってはいけませんか? – BoltClock

+0

ありがとうございました。 – Alp

答えて

6

最終的には深さが必要な場合、効率はおそらく最大の問題にはなりませんが、これを行うには非常に簡潔で効率的な方法です。

var el = $("#wrapper"); 
var i = 0; 

while ((el = el.children()).length) { 
    i++; 
} 

http://jsbin.com/ixeWaja/4/

+2

OMG美しいですが、ここで私はこの大きな再帰的イテレータをコード化し始めました。もちろん、jQueryはjQueryオブジェクトに含まれるすべての要素の '.children()'をマージします。そうすれば、あなたはその可能性を最大限に引き出すことができます。 – funkwurm

+0

すばらしい解決策。 – Alp

関連する問題