2009-09-07 6 views
1

J'ai un peu de mal à trouver un moyen rapide d'accomplir une tâche (apparemment) simple. Dire que j'ai le code html suivant:trouver le nombre de nœuds entre deux éléments avec jquery?

<ul> 
    <li>One</li> 
    <li>Two</li> 
    <li id='parent'> 
    <ul> 
     <li>Three</li> 
     <li> 
     <ul> 
      <li>Four</li> 
      <li id='child'>Five</li> 
     </ul> 
     </li> 
     <li>Six</li> 
    </ul> 
    </li> 
</ul> 

et ont les deux éléments suivants:

var child = $("#child"); 
var parent = $("#parent"); 

Dans cet exemple, il est clair que:

child.parent().parent().parent().parent(); 

sera le même nœud que ' parent'. Mais la liste que je traverse est de taille variable, donc j'ai besoin de trouver un moyen de savoir combien de '.parent() je vais devoir passer pour arriver à ce noeud parent. Je sais toujours où sont les enfants et les parents, je ne sais pas combien de couches il y a entre les deux. Y at-il une méthode jQuery intégrée pour faire quelque chose comme ça, ou est-ce que je préfère une fonction récursive qui obtient le parent, vérifie si le parent est mon nœud désiré, et si elle ne s'appelle pas elle-même? Edit: Je ne me suis peut-être pas expliqué assez clairement. Mon problème n'est pas d'obtenir le parent, mon problème est de savoir combien de nœuds sont entre l'enfant et le parent. Dans mon exemple ci-dessus, il y a 3 nœuds entre l'enfant et le parent. Ce sont les données que je dois trouver.

Répondre

7

Si vous voulez juste au parent, faites ceci:

child.parents("#parent"); 

qui est plus facile que de le faire:

child.parent().parent().parent(); 

Ou est-il une autre raison, vous devez connaître le numéro?

Une simple boucle pourrait le faire:

var node = child[0]; 
var depth = 0; 
while (node.id != 'parent') { 
    node = node.parentNode; 
    depth++; 
} 
+0

J'ai besoin de connaître le numéro parce que je veux l'utiliser. –

1

Essayez la fonction la plus proche()

http://docs.jquery.com/Traversing/closest#expr

Cela vous donnera le nombre total des parents ul:

var numofuls = $ (this) .parents ('ul') longueur. ;

+0

Cela ne me dit pas combien de noeuds sont entre bien, et c'est une donnée que j'ai besoin. –

+0

Ajout d'un script pour vous dire combien de parents il a. – PetersenDidIt

Questions connexes