Chaque fois que j'utilise <td colspan="x"></td>
, j'obtiens l'erreur suivante:
Uncaught TypeError: impossible de définir la propriété '_DT_CellIndex' sur undefined (…)
$("table").DataTable({});
<link href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.12/css/jquery.dataTables.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.12/js/jquery.dataTables.min.js"></script>
<table style="width:50%;">
<thead>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>1</td>
<td colspan="2">3 4</td>
<td colspan="3">4 5 6</td>
</tr>
</tbody>
</table>
Cela fonctionne correctement sans DataTables.js, mais lorsque nous utilisons cette structure avec datatable.js, cela ne fonctionne pas. Nous avons besoin de la structure ci-dessus. Quelqu'un at-il une idée de la façon dont nous pouvons utiliser cette structure de table datatable.js?
Vous pouvez corriger le manque de prise en charge de colspan en ajoutant une cellule "invisible" pour chaque cellule éliminée:
<tr>
<td colspan="3">Wide column</td>
<td style="display: none;"></td>
<td style="display: none;"></td>
</tr>
<tr>
<td>Normal column</td>
<td>Normal column</td>
<td>Normal column</td>
</tr>
DataTables ne se plaint pas, la table est rendue normalement et le tri est effectué (les colonnes invisibles sont classées comme une chaîne vide).
Je n'ai pas essayé avec RowSpan.
À l'heure actuelle, les tables de données ne prennent pas en charge rowpan ou colspan dans le corps de la table.
Mais la solution possible devrait être
Exemple de détails de ligne cachée DataTables
Esperons que ça marche.
Excellente solution fournie par Dirk Bergstrom fonctionne uniquement avec les données provenant de HTML.
Il est également possible d'utiliser la même idée avec des données provenant d'Ajax.
Vous devez utiliser l’option createdRow pour modifier les cellules requises lorsque l’élément TR
est créé dans le corps du tableau.
Par exemple:
var table = $('#example').DataTable({
ajax: 'https://api.myjson.com/bins/qgcu',
createdRow: function(row, data, dataIndex){
// If name is "Ashton Cox"
if(data[0] === 'Ashton Cox'){
// Add COLSPAN attribute
$('td:eq(1)', row).attr('colspan', 3);
// Hide required number of columns
// next to the cell with COLSPAN attribute
$('td:eq(2)', row).css('display', 'none');
$('td:eq(3)', row).css('display', 'none');
// Update cell data
this.api().cell($('td:eq(1)', row)).data('N/A');
}
}
});
Voir cet exemple pour le code et la démonstration.
Voir Tables de données jQuery: COLSPAN dans le corps de la table TBODY - Ajax data article pour plus de détails.
Il est possible d'émuler l'attribut ROWSPAN
à l'aide de RowsGroup plug-in.
Pour utiliser le plug-in, vous devez inclure le fichier JavaScript dataTables.rowsGroup.js
et utiliser l'option rowsGroup
pour indiquer les index des colonnes auxquelles vous souhaitez appliquer le regroupement.
var table = $('#example').DataTable({
'rowsGroup': [2]
});
Voir cet exemple pour le code et la démonstration.
Voir Tables de données jQuery: ROWSPAN dans le corps de la table TBODY article pour plus de détails.
Il est possible de regrouper des cellules simultanément verticalement et horizontalement si nous combinons les deux solutions décrites ci-dessus.
Voir cet exemple pour le code et la démonstration.
Voir Tables de données jQuery: COLSPAN dans le corps de la table TBODY - COLSPAN et ROWSPAN article pour plus de détails.
Je ne sais pas à quel moment, mais je suppose que fnFakeRowspan ne prend pas en charge la version actuelle de DataTable.
Pour une alternative, consultez RowsGroup plugin.
Je trouve cela assez facile à mettre en œuvre et fonctionne bien. La recherche fonctionne parfaitement, mais pas la commande.
Vérifiez ici pour une implémentation.
Si vous utilisez scrollX
<thead>
<tr>
<th style="width: 20px;"></th>
<th>column H</td>
<th>column H</td>
</tr>
</thead>
<tbody>
<tr>
<td colspan="3">Wide column</td>
<td style="display: none;"></td>
<td style="display: none;"></td>
</tr>
<tr>
<td>123</td>
<td>Normal column</td>
<td>Normal column</td>
</tr>
</tbody>
Réponse modifiée de #Dirk_Bergstrom
Comme datatables ne prend pas en charge colspan, je finissais généralement par utiliser des listes non ordonnées (ul) avec list-style: none;
Voir le lien ci-dessous.
Référez-vous également le plugin ici.
J'espère que ceci vous aidera