2013-08-31 8 views
5

Gibt es eine effiziente Möglichkeit, die tiefste Nachkommastelle eines bestimmten Elements zu zählen?DOM-Hierarchie-Level des Elements abrufen (Anzahl der Nachkommen-Level)

Beispiel:

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

#wrapper sollte ein Nachkomme Niveau 4 zurück, weil die tiefste Kette so geht: #wrapper > ul > li > a.

li.first sollte 1 zurückkehren, weil sie keine Kinder hat und li.last zurückkehren sollte 2 wegen li.last > a.

Ich könnte eine $('#wrapper').find(*) tun und alle Ergebnisse durchlaufen, die ziemlich langsam für Elemente sein sollte, die viele Nachkommen haben, vor allem für das body Element. Hier

ist ein Anfang für das Experimentieren: http://jsbin.com/ixeWaja/1/edit

Irgendwelche Ideen, wie effizient dieses Problem lösen?

+0

_ "Gibt es eine effiziente Möglichkeit," _ _efficint_ definieren, aber im Grunde ** No. ** – gdoron

+3

Wenn '#wrapper> ul> li> a' 3 (dh' # Wrapper "hat 3 Ebenen von Nachkommen), sollte dann nicht" li.first "0 und" li.last "1 sein? – BoltClock

+0

Danke, korrigiert es. – Alp

Antwort

6

Effizienz wird wahrscheinlich nicht Ihre größte Sorge sein, wenn Sie letztlich die Tiefe benötigen, aber dies ist eine ziemlich prägnante und effiziente Möglichkeit, es zu tun.

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

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

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

+2

OMG das ist schön, hier fing ich an, diesen großen rekursiven Iterator wegzuspielen. Aber natürlich führt jQuery die '.children()' aller Elemente zusammen, die im jQuery-Objekt enthalten sind, so dass Sie auf diese Weise zu den tiefsten Möglichkeiten gelangen. – funkwurm

+0

Große Lösung. – Alp

Verwandte Themen