2009-05-04 13 views
0

J'ai besoin de sélectionner et d'agir sur un élément de table avec JQuery, mais seulement quand il contient au moins une ligne avec plus d'une colonne. Les travaux de sélection suivants, mais ne me met en partie:J'ai besoin de JQuery pour sélectionner une table seulement si sa 1ère ligne a plus de 1 colonne

$('#my_table_is:has(tbody tr)').doSomething(); 

Variations J'ai essayé sans succès sont:

$('#my_table_id:has(tbody > tr > td:eq(1))').doSomething(); 
$('#my_table_id:has(tbody tr:nth-child(1))').doSomething(); 
$('#my_table_id:has(td:eq(1))').doSomething();  

Quelle combinaison de sélecteur et filtre faire ce travail?

BTW, la raison pour laquelle j'ai besoin de cela est que tablesorter avec un sortList multi-colonnes, va exploser quand il y a seulement 1 colonne dans la sortie de la table.

Répondre

1

Que diriez-vous juste d'un bon contrôle d'ole?

if (1 < $('#tbl thead th').size()) ... 
+0

@ neouser99 Merci, ça a fait l'affaire. FWIW, j'avais besoin d'une rangée dans le tbody, donc ma solution était: if (1 <$ ('# tbl_id tbody tr td'). Size()) {... – aponzani

0

Ne serait-il pas plus facile de fixer réellement le tablesorter au lieu de le piratage autour? (Je suppose que vous voulez dire http://tablesorter.com/).

+0

L'autre problème avec tablesorter est sa reconnaissance du type de données de colonne par la première ligne seulement. – van

+0

Je suis assez content avec tablesorter jusqu'ici. Il a déf. bat en retournant à la DB et en écrivant un SQL dynamique pour changer un ORDER BY. Et je préfère ne pas pirater la bibliothèque de quelqu'un d'autre parce que je ne veux pas la réécrire à chaque fois qu'il sort une nouvelle version – aponzani

+0

Bon point, même si je suis sûr que l'auteur serait heureux d'incorporer votre correctif. – van

0

j'ai réussi à le faire avec le sélecteur suivant (également pour une ancienne version de tablesorter):

#tableID:has(tbody > tr > td + td)

L'idée est qu'il trouvera la table que si elle a un tbody avec un tr qui a au moins deux frères td dedans.