2011-02-03 21 views
7

Come si avvia jQuery indice $.each() dal 1 invece di 0?

Sto usando .each funzione per popolare casella di selezione. Così qui voglio riempire opzioni nella casella di selezione da 1. Quindi, sulla base di una condizione che voglio aggiungere l'opzione in primo indice cioè 0.

+4

Non si può sfuggire indici basati zero se si vuole fare alcuna seria programmazione. – ChaosPandion

+0

@ChaosPandion questo dipende. Se si utilizza ad esempio la prima riga di una tabella come riga di esempio mentre gli altri hanno input, si desidera iniziare da 'i = 1' per leggere dagli input (o forse hai ragione': not (: first- bambino) ').:) –

+1

@Radek - Sto semplicemente giocando le probabilità che volevano che l'indice iniziasse sempre a "1", indipendentemente dalla situazione. – ChaosPandion

risposta

8

$.each

Quindi cercate

$.each(obj, function(i, elem) { 
    if (i === 0) return; 
    // do stuff 
}); 

alternativa riscrittura il tuo codice quindi i suoi indici e dati partono da 0. JavaScript è basato su 0, piuttosto che su 1 basato come Matlab e altri linguaggi.

+0

Questo salta l'ultimo elemento. Quindi avrebbe dovuto accedere manualmente all'ultimo elemento in quanto ogni loop sarebbe caduto di uno da – Victor

+1

@Victor, questo saltava il primo elemento, non l'ultimo. – jball

+0

@Victor cosa ti fa pensare che? SBAGLIATO. – Raynos

3

Non è possibile. Perché non dichiarare semplicemente un'altra variabile nella prima riga della funzione var myIndex = index + 1;?

+0

Sì, penso che sia a questo che si riferisce la domanda. – lonesomeday

0

Vedendo i punti di chiarimento nei commenti qui sotto, jQuery.each o qualche variazione dello stesso non è lo strumento giusto a tutti. Utilizzare un ciclo for e aggiungere 1 all'indice per produrre il valore di <option>.

Usa .prepend inserire un option come il primo figlio di un select:

for (var i = 0; i < 10; i++) { 
    $('select').prepend('<option>' + (i + 1) + '</option>'); 
} 
+0

Ew. ': gt' sembra lento e sbagliato. Vorrei fare un completo refactoring prima di usarlo. – Raynos

+0

Sto usando la funzione .each per popolare la casella di selezione, Quindi qui voglio popolare la casella di opzione da 1, Quindi in base alla condizione voglio aggiungere l'opzione nel primo indice cioè 0. – user588181

+0

@Raynos stai bene usando ': prima, : eq,: last'? ': gt' è implementato esattamente nello stesso modo - è una funzione di filtro interna. –

2

non è possibile. jQuery.each loop su oggetti (array). Per oggetti reali, utilizza un ciclo for in. A proposito, le proprietà degli oggetti non hanno affatto un indice garantito.

per gli array che utilizza standard di for loop, ma non si ha accesso all'indice di partenza.

Il tuo colpo migliore è di ignorare solo il primo elemento.

$.each(obj, function(index, elem) { 
    if(index === 0) 
     return true; 

    // code 
}); 
+0

O scrivilo su una riga o usa parentesi! – Raynos

+0

Questo salta l'ultimo elemento. Quindi avrebbe dovuto accedere manualmente all'ultimo elemento in quanto ogni loop sarebbe caduto di uno da – Victor

+2

@Victor, perché avrebbe saltato l'ultimo elemento? –

-2
$('.article_number').each(function(index) { 
    index=index+1; 
    $(this).text(index); 
}); 

anche partendo da 0 ogni volta che prende l'indice e aggiunge uno per il testo.

quindi 0 diventerà 1 nel testo. 1 diventerà 2 nel testo e così via.

Questo non interrompe l'ultimo elemento in linea causa è solo cambiando l'indice del testo non sul ogni funzione.

Spero che questo sia quello che fai.

0

Questo è quello che ho fatto:

var start = index + 1; 

Questo aggiunge solo 1 per l'indice corrente .. quindi utilizzare tale nuova variabile invece di 'indice'.

0

var data = [42, 1337]; 
 
$.each(data, function(i) { 
 
    i++; 
 
    console.log(i); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>