52 votes

jquery - obtenir toutes les lignes sauf la première et la dernière

Je veux ajouter dynamiquement une classe à toutes les lignes d'un tableau, à l'exception de la première et de la dernière ligne. Comment puis-je faire cela sans attribuer une classe css aux lignes pour les identifier ? J'obtiens actuellement toutes les lignes sauf la première avec

$("#id").find("tr:gt(0)")

Je dois combiner cela avec not("tr:last") d'une manière ou d'une autre peut-être ?

97voto

Tatu Ulmanen Points 52098

Laissez tomber le gt() car je suppose que c'est un peu plus lent que :first .

Utilisez not() en collaboration avec :first y :last :

$('table#tbl > tbody > tr').not(':first').not(':last').addClass('highlight');

La plupart des navigateurs ajoutent automatiquement un tbody dans le balisage de la table s'il est manquant, c'est pourquoi le sélecteur d'enfants immédiat échouait - il n'y avait pas d'élément <tr> en tant qu'enfants immédiats de l'élément <table> étiquette.

Je ne suis pas sûr à 100% que ce soit la façon dont tous les navigateurs procèdent, il serait donc plus sûr d'ajouter simplement l'élément <tbody> manuellement. Sinon, vous devez renifler un peu et vous ne pouvez pas le faire en une seule fois :

if($('table#tbl > tbody').size() > 0) {
    $('table#tbl > tbody > tr').not(':first').not(':last').addClass('highlight');
} else {
    $('table#tbl > tr').not(':first').not(':last').addClass('highlight');
}

J'espère que cela résoudra votre problème !

14voto

mikkelz Points 178

Essayez ça :

.not(':first').not(':last')

12voto

Sumit Points 394

Pourquoi pas juste ça ?

$('table tr:not(:first-child):not(:last-child)');

fonctionne pour moi.

2voto

Stuart G Points 11

Il est étrange que les suggestions affichées n'aient pas fonctionné, elles devraient toutes fonctionner ! MAIS...

Si cela n'a pas fonctionné, faites-le de cette manière : .... légèrement plus lent mais qui doit fonctionner ! ESSAYEZ :

$('table#tbl tr').addClass('highlight');
$('table#tbl tr:first-child').removeClass('highlight');
$('table#tbl tr:last-child').removeClass('highlight');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X