2011-10-06 16 views
20

Así que yo saw this question hace unos momentos en SO y me hizo pensar.¿Es esto un elemento par o impar?

Básicamente el OP tenían algo en este sentido

<div>a</div> 
<div>b</div> 
<div>c</div> 
<div>d</div> 
$('div').each(function() { 
    //do something different based on whether even or odd div 
    if ($(this) == ':even') {} //invalid markup I know! 
    else {} 
}); 

¿Hay una manera de contar dentro de la .each() si el elemento actual es una instancia par o impar?

Existe el método .filter de jQuery, pero siempre devuelve verdadero cuando tiene un solo elemento.

También me doy cuenta de que puede usar el selector nth-child o configurarlo de otras maneras, pero tengo curiosidad sobre este caso específico.

+1

Ya está en la respuesta a esa pregunta. Eche un vistazo al último fragmento de código: http://stackoverflow.com/questions/7679003/jquery-tigerstipe-rollover-conundrum/7679027#7679027 – BoltClock

+0

@BoltClock - Gracias, me perdí esa actualización. – mrtsherman

Respuesta

50

La devolución de llamada a .each se pasa el índice del elemento y el elemento:

$('div').each(function(i, el) { 
    // As a side note, this === el. 
    if (i % 2 === 0) { /* we are even */ } 
    else { /* we are odd */ } 
}); 
+4

+1. Me venciste por 2 segundos. :) – Shef

+0

¡Gracias, no me di cuenta de que tenía una devolución de llamada para el índice! http://jsfiddle.net/mrtsherman/EjduK/ – mrtsherman

9
$('div').each(function(index) { 
    //do something different based on whether even or odd div 
    if (index % 2 == 0) {} // even 
    else {} // odd 
}); 
+0

actualmente ambos tienen el mismo tiempo :) –

6

Si usted sabe que todos los elementos son hijos del mismo padre, usted puede utilizar el índice proporcionada por cada

$('div').each(function(index) { 
    if (index%2 == 0) {} 
    else {} 
}); 

lo contrario, utilice la función index que calculará el índice del elemento entre sus hermanos.

$('div').each(function() { 
    if ($(this).index()%2 == 0) {} 
    else {} 
}); 
+0

+1 - gracias por mostrarme el método .index(). ¡Una nueva para mí! – mrtsherman

2

usando jQuery API .is(selector)

$('div').each(function() { 
    //Check if element is even 
    if ($(this).is(":even")) { 
    } 

    //Check if element is odd 
    if ($(this).is(":odd")) { 
    } 

}); 
+0

Esto no parece funcionar. Otro usuario ofreció la misma solución y desde entonces ha eliminado la respuesta. Lógicamente parece prometedor, pero no funciona. http://jsfiddle.net/mrtsherman/EjduK/1/ – mrtsherman

+0

@mrtsherman: Gracias y sí, lo he comprobado de nuevo y encontré que no funciona para la versión de jquery <1.10.1. Tiene jquery 1.6.3 en su enlace jsfiddle. –

Cuestiones relacionadas