2010-11-17 10 views
5

¿Cómo funcionan los selectores lt y gt? ¿Es lo mismo el orden en que se ponen? (si ambos están en el mismo selector)jQuery index and selectors: lt y: gt

Necesito dos respuestas para esta pregunta.

1) ¿El resultado de la línea siguiente SIEMPRE no debe ser 0? Estoy preguntando a aquellos td cuyo índice sea mayor que 3 Y menor que 2. Hay un índice que podría ser: ix> 3 & ix < ¡2 al mismo tiempo!

$("tr").find("td:gt(3):lt(2)").length 

2) Resulta que cuando cambio el orden de los gt selectores y lt que empiece a funcionar bien. El resultado de la línea siguiente es 0.

$("tr").find("td:lt(2):gt(3)").length 

shoudn't el orden de los selectores de ser indiferente al resultado?

¡Es como si el selector no funciona si es después de un gt o algo así!

Otros detalles:

  • Usted puede ver esto aquí: http://jsfiddle.net/YQtRh/
  • Para aquellos que se preguntan cuál es el resultado de la primera línea de JS es 1.
  • En el ejemplo que td devuelto por el primera línea es la última (.text() == 4)

¡Gracias!

Diego

Respuesta

5

La cuestión es que jQuery se ejecuta sus selectores de forma secuencial, en lugar de compilar en un solo selector. Así que :gt(3):lt(2) significa "encontrar todos los elementos en el conjunto con un índice de más de 3, luego, en el conjunto devuelto, buscar todos los elementos con un índice de menos de 2". Girándolo alrededor td:lt(2):gt(3) cambia el orden de la lógica, por lo que da un resultado diferente.


En su ejemplo:

<table> 
    <tr> 
     <td>0</td> 
     <td>1</td> 
     <td>2</td> 
     <td>3</td> 
     <td>4</td> 
    </tr> 
</table> 

:gt(3) da sólo el elemento final porque es el único que tiene un índice mayor que 3. Así que tiene las siguientes opciones (desde la consola de Chrome):

[<td>​4​</td>​] 

Correr :lt(2) en que, obviamente, no tendrá ningún efecto, ya que el único elemento en el conjunto tiene un índice de 0, lo que está por debajo de 2.

Haciendo :lt(2) en el conjunto original da el siguiente resultado:

[<td>​0​</td>​, <td>​1​</td>​] 

Correr :gt(3) en esto, obviamente, se eliminarán todos los elementos del conjunto, ya que tienen los índices 0 y 1, respectivamente, ninguno de los cuales es mayor que 3.

1

Los índices se vuelven a indexar después de un primer filtrado, esto es secuencial.

1) Imagine que su td contiene 5 elementos.

  • Obtenga índices> 3: Obtenga 1 elemento.
  • Get índices < 2: obtener 1 elemento de hacer que el elemento anterior de índice 4 es ahora índice 0.

2) En este caso

  • Obtener índices < 2: Obtener un máximo de 2 elementos.
  • Get índices> 3 en un conjunto de elementos 2 o menos: siempre devuelve 0.
0

Probar

$("tr").find("td").slice(startindex,endindex) 

Gracias

Sumesh

Cuestiones relacionadas