Le plugin jQuery dataTables peut-il respecter les couleurs des lignes alternées après le tri/filtrage?

j'utilise jQuery datatables plugin ce qui semble être un plugin utile pour prendre une table html régulière et ajouter le tri, le filtrage, la pagination, etc

un problème que je vois est que quand je cherche il ne semble pas mettre à jour les classes de ligne" impair " / "pair" donc si ma table a 100 lignes mais quand je filtre il a 10 il pourrait être que tous les 10 sont la même backcolor ou 8 sont la même backcolor

je vois le même problème après j'ai effectuer un tri par colonne où il pourrait "bouquet" un tas de lignes avec le même backcolor après j'ai effectuer un tri par colonne.

est-ce qu'il y a de toute façon que le plugin datatables peut réappliquer un style Pair/Impair après le filtre donc peu importe ce que vous filtrez, il y a toujours une autre ligne backcolor?

21
demandé sur Mousey 2015-06-11 22:37:06

4 réponses

CAUSE

Cette fonctionnalité est disponible par défaut. Probablement la raison de ce comportement inhabituel:

  • vous remplacez odd et even classes dans votre CSS, ou
  • votre code affecte la structure de la table après filtrage

SOLUTION #1

  1. style par défaut ou jQuery UI ou Fondation

    Classe D'utilisation display pour votre <table> comme indiqué ci-dessous. Voir Options de style par défaut pour une liste de toutes les classes.

    <table id="example" class="display" cellspacing="0" width="100%">   
    

    Voir c'jsFiddle pour la démonstration.

  2. Bootstrap

    utiliser les classes table table-striped table-bordered pour votre <table> comme indiqué ci-dessous:

    <table id="example" class="table table-striped table-bordered" cellspacing="0" width="100%">
    

    Voir ce jsFiddle pour la démonstration.

SOLUTION #2

S'il y a une règle CSS qui l'emporte odd et even classes vous pouvez demander à jQuery DataTables d'utiliser des classes alternatives à la place avec stripeClasses option.

$('#example').DataTable( {
  "stripeClasses": [ 'odd-row', 'even-row' ]
} );
18
répondu Gyrocode.com 2016-12-21 14:23:20

pour archiver ceci vous devez utiliser Base style-no stylling classesdatatable pour ce faire, retirez datatable classes de tabletag

après cela créez vos propres classes pour odd e.g myodd et evene.g myeven ) lignes.

maintenant la tâche suivante est d'appliquer ces classes aux lignes de la table sur chaque dessin de table signifie:

1. Lorsque des filtres sont appliqués

2. Quand la limite des enregistrements visibles est changée etc.

Pour ce faire datatabe fournit rowCallback() vous pouvez l'utiliser de cette façon:

 $('#myTabel').dataTable({
        "rowCallback": function( row, data, index ) {
            if(index%2 == 0){
                $(row).removeClass('myodd myeven');
                $(row).addClass('myodd');
            }else{
                $(row).removeClass('myodd myeven');
                 $(row).addClass('myeven');
            }
          }
    });

Remarque:

à éviter !importantcss rule définir css ruleodd,even lignes comme ceci:

table.dataTable tbody tr.myeven{
    background-color:#f2dede;
}
table.dataTable tbody tr.myodd{
    background-color:#bce8f1;
}

DEMO:http://jsfiddle.net/ishandemon/4za80xky/

15
répondu PHP Worm... 2016-07-14 04:58:14

Mon commentaire est applicable pour l' comment supprimer ou modifier les classes de lignes jQuery Datatable

les Datatables fournissent maintenant un paramètre optionnel JSON nommé comme défini pour son 1.10 + documentation.

donc, si vous voulez supprimer complètement les classes impaires Pair puis utilisez le paramètre suivant lors de l'initialisation des tables.

$('#example').dataTable( {
  "stripeClasses": [] //Empty Array.
} );

si vous voulez appliquer la classe CSS personnalisée sur chaque ligne de Datatables puis.

$('#example').dataTable( {
  "stripeClasses": ['yourRowClass']
} );

Si vous voulez appliquer plus de 1 classe css (dans l'étrange même ou de manière séquentielle) tels que ces classes se répéter à soi après chaque nième ligne est terminée, utilisez ce

$('#example').dataTable( {
  "stripeClasses": [ 'strip1', 'strip2', 'strip3' ] //This combination will repeat always 3rd row
} );

les DataTables s'appliqueront à chaque classe de façon séquentielle, en boucle au besoin.

2
répondu vibs2006 2017-07-06 09:22:15

je sais que c'est ancien, mais j'ai dû développer la solution ci-dessus. J'autorise l'utilisateur à ajuster la couleur des rayures, donc j'ai dû faire:

rowCallback: (row, data, index) => {
  const stripeColor = this.options.stripeColor;

  if (index % 2 == 0) {
    $(row).removeClass('odd-row even-row');
    $(row).addClass('odd-row');

    if (!!this.options.stripe) {
      $(row).css({ background: 'transparent' })
    }
  } else {

    $(row).removeClass('odd-row even-row');
    $(row).addClass('even-row');

    if (!!this.options.stripe) {
      $(row).css({ background: stripeColor })
    }
  }
},
0
répondu stevelacerda7 2017-08-31 17:19:03