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?
4 réponses
CAUSE
Cette fonctionnalité est disponible par défaut. Probablement la raison de ce comportement inhabituel:
- vous remplacez
odd
eteven
classes dans votre CSS, ou - votre code affecte la structure de la table après filtrage
SOLUTION #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.
-
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' ]
} );
pour archiver ceci vous devez utiliser Base style-no stylling classesdatatable
pour ce faire, retirez datatable classes de table
tag
après cela créez vos propres classes pour odd
e.g myodd
et even
e.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 !important
css rule
définir css rule
odd
,even
lignes comme ceci:
table.dataTable tbody tr.myeven{
background-color:#f2dede;
}
table.dataTable tbody tr.myodd{
background-color:#bce8f1;
}
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.
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 })
}
}
},