J'ai une table HTML avec plusieurs colonnes et je dois implémenter un sélecteur de colonne en utilisant jquery. Lorsqu'un utilisateur clique sur une case à cocher, je souhaite masquer / afficher la colonne correspondante dans le tableau. Je voudrais faire cela sans attacher une classe à chaque td de la table, existe-t-il un moyen de sélectionner une colonne entière à l'aide de jquery? Ci-dessous, un exemple du HTML.
<table>
<thead>
<tr><th class="col1">Header 1</th><th class="col2">Header 2</th><th class="col3">Header 3</th></tr>
</thead>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
</table>
<form>
<input type="checkbox" name="col1" checked="checked" /> Hide/Show Column 1 <br />
<input type="checkbox" name="col2" checked="checked" /> Hide/Show Column 2 <br />
<input type="checkbox" name="col3" checked="checked" /> Hide/Show Column 3 <br />
</form>
Réponses:
Personnellement, j'irais avec l'approche class-on-each-td / th / col. Ensuite, vous pouvez activer et désactiver les colonnes en utilisant une seule écriture dans className sur le conteneur, en supposant des règles de style telles que:
Cela va être plus rapide que n'importe quelle approche de boucle JS; pour de très longues tables, cela peut faire une différence significative en termes de réactivité.
Si vous parvenez à ne pas prendre en charge IE6, vous pouvez utiliser des sélecteurs de contiguïté pour éviter d'avoir à ajouter les attributs de classe à tds. Ou bien, si votre souci est de nettoyer le balisage, vous pouvez les ajouter automatiquement à partir de JavaScript lors d'une étape d'initialisation.
la source
.hidden {display:none;}
et utilisé.addClass('hidden')
et.removeClass('hidden')
qui était un peu plus rapide que.hide()
et.show()
.Une ligne de code utilisant jQuery qui masque la 2ème colonne:
Si votre table a un en-tête (th), utilisez ceci:
Source: Masquer une colonne de table avec une seule ligne de code jQuery
jsFiddle pour tester le code: http://jsfiddle.net/mgMem/1/
Si vous voulez voir un bon cas d'utilisation, jetez un œil à mon article de blog:
Cachez une colonne de table et colorisez les lignes en fonction de la valeur avec jQuery .
la source
vous pouvez utiliser des colgroups:
votre script pourrait alors changer simplement la
<col>
classe désir .la source
$('table > colgroup > col.yourClassHere')
sélecteur jQuery, vous pouvez toujours définir smth comme la couleur d'arrière-plan de toute la colonne, mais vous ne pouvez plus activer la visibilité de la colonne. Les navigateurs testés étaient MSIE 11 , Safari 5 , Chromium 44 , Opera 12 , Mozilla SeaMonkey 2.40 , Mozilla Firefox 43 . "La plupart des attributs en HTML 4.01 ne sont pas pris en charge en HTML5" - voir ici .Ce qui suit devrait le faire:
Il s'agit d'un code non testé, mais le principe est que vous choisissez la cellule du tableau dans chaque ligne qui correspond à l'index choisi extrait du nom de la case à cocher. Vous pouvez bien sûr limiter les sélecteurs avec une classe ou un identifiant.
la source
Voici une réponse un peu plus complète qui fournit une interaction de l'utilisateur par colonne. Si cela doit être une expérience dynamique, il doit y avoir une bascule cliquable sur chaque colonne qui indique la possibilité de masquer la colonne, puis un moyen de restaurer les colonnes précédemment masquées.
Cela ressemblerait à quelque chose comme ceci en JavaScript:
Pour prendre en charge cela, nous ajouterons du balisage à la table. Dans chaque en-tête de colonne, nous pouvons ajouter quelque chose comme celui-ci pour fournir un indicateur visuel de quelque chose de cliquable
Nous autoriserons l'utilisateur à restaurer les colonnes via un lien dans le pied de page du tableau. S'il n'est pas persistant par défaut, l'activer dynamiquement dans l'en-tête pourrait se bousculer autour de la table, mais vous pouvez vraiment le placer où vous le souhaitez:
C'est la fonctionnalité de base. Voici une démo ci-dessous avec quelques détails supplémentaires. Vous pouvez également ajouter une info-bulle au bouton pour aider à clarifier son objectif, styliser le bouton un peu plus organiquement dans un en-tête de tableau et réduire la largeur de la colonne afin d'ajouter des animations css (un peu bancales) pour rendre la transition un peu moins nerveux.
Démonstration de travail dans jsFiddle & Stack Snippets:
Afficher l'extrait de code
la source
$(document).ready
mais je n'ai pas de chance.hide-col
pour supprimer des colonnes, mais elle peut également être utilisée pour indiquer l'état, vous pouvez donc soit ajouter.hide-col
à chaquetd
&tr
lors du rendu du html et être terminé. Ou si vous voulez l'ajouter à moins d'endroits, placez-le dans l'en-tête (cet état devra aller quelque part), et sur init, utilisez-le pour masquer cet index de colonne parmi les enfants. Actuellement, le code écoute simplement la position au clic, mais il pourrait être modifié pour rechercher également la position de classe. Aussi, bonne journée de la Turquieclass='hide-col'
où vous voulez dans votre html (probablement dans lethead > tr > th
sens le plus logique et il reprendra pour s'assurer qu'il masque toutes les cellules de cette colonne et affiche également dynamiquement le pied de page de restaurationEt bien sûr, le seul moyen CSS pour les navigateurs prenant en charge
nth-child
:table td:nth-child(2) { display: none; }
Ceci est pour IE9 et plus récent.
Pour votre cas d'utilisation, vous aurez besoin de plusieurs classes pour masquer les colonnes:
ect ...
la source
Ce qui suit s'appuie sur le code d'Eran, avec quelques modifications mineures. Je l'ai testé et il semble fonctionner correctement sur Firefox 3, IE7.
la source
la source
Sans cours? Vous pouvez alors utiliser le Tag:
Et pour leur montrer, utilisez:
la source