Modifica (vedi commenti) La risposta originale non è corretta ... ho intenzione di tenerlo qui per ora in modo che i commenti hanno senso.
Guardando la fonte jQuery per index
, si può vedere la following snippet:
if (!elem) {
return (this[0] && this[0].parentNode) ? this.prevAll().length : -1;
}
confronta questo al corrispondente (se molto diverso) frammento da una versione precedente, 1.6.2. Si noti l'uso di this[0]
:
return jQuery.inArray(this[0],
// If it receives a string, the selector is used
// If it receives nothing, the siblings are used
elem ? jQuery(elem) : this.parent().children());
Sembra che nella versione attuale la parte this.prevAll
causa il problema. Se lo si cambia in this.eq(0).prevAll
(che replica ciò che afferma la documentazione index
), si ottiene il valore corretto restituito. Quindi sembrerebbe un bug jQuery.
Nella versione 1.6.2, viene utilizzato inArray
. Questo metodo restituisce l'indice del primo argomento nel secondo argomento (o -1
se il primo argomento non viene trovato nel secondo). Poiché il primo argomento è this[0]
(il primo elemento nel set abbinato) otteniamo il risultato previsto.
Ecco uno updated fiddle con la sorgente jQuery modificata inclusa. Il risultato corretto viene avvisato.
risposta originale (questo non è corretto):
leggere la parte citata dei documenti di nuovo con attenzione (evidenziazione in grassetto aggiunto):
il valore di ritorno è un intero che indica il posizione del primo elemento all'interno dell'oggetto jQuery relativo agli elementi di pari livello.
Solo perché due dei fratelli sono stati rimossi dal gruppo appaiato, ma non cambia il valore restituito da index
. In altre parole, l'elemento corrispondente (<li>Fourth Item</li>
) avrà sempre l'indice 3, relativo ai suoi fratelli (a meno che, naturalmente, i nuovi fratelli siano inseriti nel DOM prima dell'elemento in questione).
colpito il chiodo sulla testa. Hai scoperto una regressione. :) – Jon
Yay per me !!! È possibile visualizzare il biglietto qui: http://bugs.jquery.com/ticket/10977 –
Sulla base delle mie conclusioni (si veda [risposta] (http://stackoverflow.com/a/8424662/50079), penso che il il biglietto è fuorviante. Questa è una regressione introdotta in 1.6.3 e dovrebbe essere riportata come tale. Non c'è (ovviamente) nulla nelle note di rilascio 1.6.3 che indica che il comportamento documentato di 'index()' sarebbe cambiato. – Jon