12
votes

Obtenir une gamme d'éléments dans un sélecteur JQuery

Mon problème est que j'ai une table, mais je veux seulement un sous-ensemble des lignes, du premier index au dernier index. Je pensais que tu pouvais le faire comme ça:

$('table tr:gt(2):lt(5)');


1 commentaires

Voir aussi .slice ()


3 Réponses :


0
votes

Je pense que vous avez l'impression, bien que je voudrais imaginer que JQuery comptera de 0 dans son indice d'éléments.

Alors, ce serait GT (1) et LT (4)?


1 commentaires

Droite, c'est à partir de l'indice zéro. Mon erreur.



10
votes

Que diriez-vous de $ ('Table TR'). Slice (2, 4)

Étant donné que les matrices JavaScript sont 0 indexées, cela vous donnera la troisième et quatrième rangée de la table. La tranche reviendra toujours sur un ensemble jQuery enveloppé (SUB). C'est donc le même résultat final.


4 commentaires

Oui, mais je veux que le sélecteur ne cherche que les lignes spécifiées. Avec cette méthode, JQuery prend la première fois toutes les lignes de table, puis filtre les tables indésirables.


@Bob, il le fait même si vous utilisez la version du sélecteur


Oh, c'est décevant. J'ai supposé que JQuery interne sauterait des rangées inférieures à l'indice donné ou de l'arrêt lorsque les lignes sont supérieures à l'indice donné lorsque vous utilisez leurs modificateurs de sélecteur respectifs. De cette façon, cela ne serait pas obligé de considérer toutes les lignes de table.


Ce n'est pas grand chose de s'inquiéter de la voie, car ces lignes reviennent d'un appel de getplementtagnements relativement rapides. Je grandement préférez utiliser une tranche, car ce complexe: GT (): LT () Le sélecteur est tout simplement un texte simple et très fragile / illisible.



19
votes

Vous êtes assez proche, mais le problème de votre sélecteur est le : lt (5) code> filtre.

Vous voudriez quelque chose comme: p>

$('table tr:gt(2):lt(2)');


3 commentaires

Je suppose que la question secondaire que puis-je soumettre une demande de fonctionnalité pour ajouter un sélecteur de plage, de sorte qu'il pourrait ressembler à quelque chose comme $ ('Table TR: in (2,4)') ou existe-t-il un plugin qui accomplit déjà une telle fonctionnalité ?


@Bob vous devriez vraiment examiner à l'aide de SLICE comme @Daveward Réputé. Il est beaucoup plus lisible et fonctionnera comme vous l'attendez. En outre, vous n'obtenez pas de gains de performance en faisant des choses de cette façon, il trouve toujours tout Table TR puis filtrant cette liste.


Je conviens que la meilleure solution ici serait définitivement une tranche, je clarifiais simplement le code en question. Slice est définitivement le meilleur moyen d'obtenir une gamme. Les sélecteurs de filtres sont beaucoup plus lents que les fonctions de réseau natif.