2011-01-17 25 views
15

¿Cuál es la forma más fácil de obtener la profundidad de un elemento en JavaScript puro o jQuery? Por "profundidad" me refiero a cuántos elementos se anida profundamente, o cuántos antepasados ​​tiene.JS/jQuery: Obtener la profundidad del elemento?

+0

http://stackoverflow.com/ questions/748842/how-to-get-all-element-parents-using-jquery – mplungjan

Respuesta

24

¿Qué tal:

$('#my-element').parents().length 
2

intentar algo como esto:

<html> 
    <head> 
     <title>MooExample</title> 
     <script type="text/javascript" src="jquery.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       $("li").click(function() { 
        alert($(this).parents().length); 
       }); 
      }); 
     </script> 
    </head> 

    <body> 
     <ul> 
      <li>moo</li> 
      <li>foo</li> 
      <li>fasoo</li> 
      <li>moasf</li> 
      <li>moosadg</li> 
      <li>moo1</li> 
      <li>moo412</li> 
      <li>moo613a</li> 
     </ul> 
    </body> 
</html> 
4

Suponiendo que no desea incluir cuerpo y la etiqueta HTML en los padres para contar su uso:

$("#element").parents("*").not("body,html").size() 

Demostración en línea aquí: http://jsfiddle.net/zaJff/

1

Mi consejo sería reconsiderar la forma en que resuelve su problema: creo que encontrar el número de generaciones entre los nodos probablemente no sea la mejor manera de hacerlo, parece una solución que probablemente se rompa fácilmente con los cambios futuros. al código

Si insiste, sin embargo, la solución (por Cletus, en javascript nativo) parece bastante bueno en esta página: find number of nodes between two elements with jquery?

+0

¿Cuándo sería incorrecta la solución de polarblau? Cada elemento solo puede tener un elemento primario, por lo que, lógicamente, si está contando el número de antepasados, entonces siempre debería ser correcto. Sin embargo, me olvido de por qué incluso hice la pregunta ... probablemente fue un mal enfoque. – mpen

+0

En realidad, ahora que pienso en esto, estás en lo cierto, corrigiendo mi comentario. –

8

Una nota adicional. Si desea obtener la profundidad relativa a un determinado contexto que puede hacer:

var depth = $("#my-element","#ContextContainerID").parents("ul").length; 

arriba, estoy en busca de cuántos UL'S están dentro del contenedor #ContextContainerID

+0

¿Hay una diferencia entre 'size()' y 'length'? – mpen

+0

@Sachin Sharma sugiere '$ (" # my-element "). ParentsUntil (" # ContextContainerID ", 'ul'). Length' – mplungjan

Cuestiones relacionadas