2010-11-17 6 views
5

Comment fonctionnent les sélecteurs lt et gt? Est-ce la même chose que l'ordre dans lequel ils sont placés? (s'ils sont tous les deux dans le même sélecteur)jQuery index et sélecteurs: lt et: gt

J'ai besoin de deux réponses à cette question.

1) Le résultat de la ligne suivante ne doit pas toujours être 0 ??? Je demande à ces td quel indice soit supérieur à 3 ET inférieur à 2. Il y a un index qui pourrait être: ix> 3 & ix < 2 en même temps !! 2) Il s'avère que lorsque je change l'ordre des sélecteurs gt et lt il commence à bien fonctionner. Le résultat de la ligne suivante est 0.

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

L'ordre des sélecteurs ne doit-il pas être différent du résultat? C'est comme si le sélecteur ne fonctionne pas si c'est après un GT ou quelque chose comme ça!

Informations complémentaires:

  • Vous pouvez regarder cette ici: http://jsfiddle.net/YQtRh/
  • Pour ceux qui se demandent quel est le résultat de la ligne de la première est 1.
  • Dans l'exemple td retourné par la première ligne est le dernier (.text() == 4)

Merci!

Diego

Répondre

5

Le problème est que jQuery exécute ses sélecteurs de manière séquentielle, plutôt que de les compiler dans un sélecteur. Donc :gt(3):lt(2) signifie "trouver tous les éléments de l'ensemble avec un index de plus de 3, puis, dans l'ensemble retourné, trouver tous les éléments avec un indice inférieur à 2". Le tourner td:lt(2):gt(3) change l'ordre de la logique, donc donne un résultat différent.


Dans votre exemple:

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

:gt(3) ne donne que l'élément final, car il est le seul avec un indice supérieur à 3. Vous avez donc la sélection suivante (à partir de la console Chrome):

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

Courir :lt(2) sur qui évidemment n'a pas d'effet, parce que l'un des éléments de l'ensemble a un indice de 0, ce qui est inférieur à 2.

Faire :lt(2) sur l'ensemble d'origine donne le résultat suivant:

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

Courir :gt(3) sur ce supprimera évidemment tous les éléments de l'ensemble, car ils ont les indices 0 et 1 respectivement, dont aucun n'est supérieur à 3.

1

Les index sont réindexés après un premier filtrage, c'est séquentiel.

1) Imaginez que votre td contient 5 éléments.

  • Obtenir les index> 3: Obtenir 1 élément.
  • index Get < 2: obtenir une élément provoque l'élément précédent d'index 4 est maintenant indice 0.

2) Dans ce cas

  • Obtenir les index < 2: obtenir un maximum de 2 éléments.
  • index Get> 3 sur un ensemble de 2 éléments ou moins: retourne toujours 0.
0

Essayez cette

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

Merci

Sumesh