2011-10-11 12 views
6

tengo una estructura DOM que se parece a esto:Conseguir el índice de un elemento de corriente a través de todos los elementos coincidentes en el DOM

<div class="chapter"> 
    <section></section> 
    <section></section> 
</div> 
<div class="chapter"> 
    <section></section> 
    <section></section> 
    <section class="current"></section> 
    <section></section> 
</div> 
<div class="chapter"> 
    <section></section> 
    <section></section> 
    <section></section> 
    <section></section> 
</div> 

que desea obtener el número de índice de la sección con una clase de "actual ", en todas las secciones. En este ejemplo, el índice de eso sería 5, ya que es la etiqueta de la quinta sección y contiene una clase de corriente.

¿Cómo obtengo esto con jQuery?

He empezado con esto para obtener una lista de todas las secciones en el DOM:

var sections = $('section'); 

He intentado cosas como esta para tratar de conseguir el resultado que quiero:

alert($(sections+'.current').index()); 

Eso devuelve un error js.

¿Qué me falta aquí? ¡Gracias!

Respuesta

11

En su código $('section') le devolverá todas las secciones como un objeto jquery. Entre ellos para obtener el índice de una sección que tiene una clase de current usted puede hacer esto:

sections.index($(".current")); 

Esto le devolvería un índice relativo de la sección con la corriente de clase, lo que sería 4 como $('sections') regresarían usted tiene una matriz de objetos jQuery (0 indexada) que contiene todos los elementos de las secciones. Por lo tanto, el elemento que coincide es el quinto elemento y el índice devolvería 4. Espero que este fiddle ayude.

+0

Esto parece que debería funcionar, de hecho, lo probé aquí http://jsfiddle.net/uae2U/ y lo hace, pero desafortunadamente en mi código está devolviendo -1. Esto me acerca aún más, ¡así que gracias! – Cory

+0

Si devuelve -1, es probable que haya algún error en los selectores. index() devolvería -1 si no hay coincidencia. –

0

cambio como éste

var sections = 'section'; 

su código está haciendo esto y su mal

alert($($('section')+'.current').index()); 
+0

Gracias, pero no veo cómo eso ayuda. establecer var sections = 'section'; no hace nada más que crear una cadena de texto. – Cory

+0

si debe usar este tipo de secciones = $ ('sección'); luego use solo esta alerta (sections.hasClass ('current'). Index()); –

6
$('.current').index('section'); 

Consulte la documentación de index.

Si una cadena de selector se pasa como argumento, .index() devuelve un número entero que indica la posición del elemento original en relación con los elementos que coinciden con el selector. Si no se encuentra el elemento, .index() devolverá -1.

+0

este también funciona. ¡Gracias! – Cory

Cuestiones relacionadas