2013-08-31 102 views
5

有沒有一種有效的方法來計算特定元素的最深的後代級別?獲取元素的DOM層次結構級別(計數子孫級別)

舉例:#wrapper > ul > li > a

<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後裔水平。

li.first應該返回1,因爲它沒有兒童和li.last應該返回因爲li.last > a2

我可以做一個$('#wrapper').find(*)並遍歷所有結果,對於有很多後代的元素,特別是對於body元素,這應該會很慢。

這裏是試驗開始:http://jsbin.com/ixeWaja/1/edit

任何想法如何有效地解決這個問題?

+0

_ 「有沒有一種有效的方法」 _定義_efficint_,但基本上,**號** – gdoron

+3

如果'#wrapper指定> ul> li>了'爲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

相關問題