Editar (ver comentarios) La respuesta original es incorrecta ... Voy a dejarlo aquí por ahora para que los comentarios tengan sentido.
En cuanto a la fuente de jQuery para index
, se puede ver la following snippet:
if (!elem) {
return (this[0] && this[0].parentNode) ? this.prevAll().length : -1;
}
comparar esto con el correspondiente (si es muy diferente) fragmento de una versión anterior, 1.6.2. Observe el uso de 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());
Parece que en la versión actual de la parte this.prevAll
causa el problema. Si lo cambia a this.eq(0).prevAll
(que replica lo que indica la documentación de index
), se obtiene el valor correcto. Entonces parece que esto es un error jQuery.
En la versión 1.6.2, se usa inArray
. Ese método devuelve el índice del primer argumento en el segundo argumento (o -1
si el primer argumento no se encuentra en el segundo). Como el primer argumento es this[0]
(el primer elemento en el conjunto combinado) obtenemos el resultado esperado.
Aquí hay un updated fiddle con la fuente jQuery modificada incluida. El resultado correcto es alertado.
Respuesta original (esto es incorrecto):
Leer la parte citada de la documentación de nuevo con cuidado (el resaltado en negrita en el original):
el valor de retorno es un entero que indica la posición del primer elemento dentro del objeto jQuery en relación con sus elementos hermanos.
El hecho de que dos de los hermanos se hayan eliminado del conjunto combinado, no cambia el valor devuelto por index
. En otras palabras, el elemento coincidente (<li>Fourth Item</li>
) siempre tendrá el índice 3, relativo a sus hermanos (a menos que, por supuesto, se inserten nuevos hermanos en el DOM antes del elemento en cuestión).
ha puesto el dedo en la cabeza. Usted ha descubierto una regresión. :) – Jon
¡Yay para mí! Puede ver el ticket aquí: http://bugs.jquery.com/ticket/10977 –
Basado en mis hallazgos (vea [respuesta] (http://stackoverflow.com/a/8424662/50079)), creo que el boleto es engañoso Esta es una regresión introducida en 1.6.3 y debe informarse como tal. No hay (por supuesto) nada en las notas de la versión 1.6.3 que indique que el comportamiento documentado de 'index()' habría cambiado. – Jon