2011-10-06 15 views
20

Quindi I saw this question pochi istanti fa su SO e mi ha fatto pensare.È un elemento pari o dispari?

Fondamentalmente il PO ha avuto qualcosa in questo senso

<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 {} 
}); 

C'è un modo per dire all'interno del .each() se il vostro elemento corrente è un'istanza pari o dispari?

C'è il metodo .filter di jQuery, ma restituisce sempre true quando ha un singolo elemento.

Mi rendo anche conto che è possibile utilizzare il selettore nth-child o configurarlo in altri modi, ma sono curioso di sapere in questo caso specifico.

+1

E 'già la risposta a questa domanda. Dai un'occhiata all'ultimo frammento di codice: http://stackoverflow.com/questions/7679003/jquery-tigerstipe-rollover-conundrum/7679027#7679027 – BoltClock

+0

@BoltClock - Grazie, ho perso l'aggiornamento. – mrtsherman

risposta

50

La richiamata per .each viene passato l'indice dell'elemento e l'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. Mi hai battuto per 2 secondi. :) – Shef

+0

Grazie non mi ero reso conto che aveva un callback per l'indice! 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

in realtà entrambi avete lo stesso tempo :) –

6

Se si sa che tutti gli elementi sono figli dello stesso padre, è possibile utilizzare l'indice fornito da ciascun

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

altrimenti, utilizzare la funzione index che calcolerà l'indice dell'elemento tra i suoi fratelli.

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

+1 - grazie per avermi mostrato il metodo .index(). Uno nuovo per me! – mrtsherman

2

utilizzando 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

Questo non sembra funzionare. Un altro utente ha offerto la stessa soluzione e da allora ha eliminato la risposta. Logicamente sembra promettente, ma non viene fuori. http://jsfiddle.net/mrtsherman/EjduK/1/ – mrtsherman

+0

@mrtsherman: Grazie e sì, ho controllato di nuovo e ho trovato che non funziona per la versione jquery <1.10.1. Hai jquery 1.6.3 nel tuo jsfiddle link. –

Problemi correlati