Datatables redimensionnement à la volée

J'utilise le plug-in jQuery DataTables merveilleux; http://datatables.net / Ajout des options FixedColumns et KeyTable.

Maintenant, la table redimensionne joliment lorsque la taille de la fenêtre est modifiée. Cependant, la div contenant de la table peut également être redimensionnée en largeur par une animation jQuery, et je n'ai pas trouvé un moyen de redimensionner le tableau avec elle ... mais elle reste stagnante dans sa largeur d'origine. Seulement si je change la largeur div dans le code avant pageload, la table est redimensionnée correctement.

Comment puis-je faire redimensionner le DataTable à la volée en fonction de la largeur de la fenêtre et de la largeur div contenant? Merci à l'avance! :-)

50
demandé sur Emphram Stavanger 2011-11-26 18:12:43

12 réponses

Ce qui se passe, C'est que DataTables définit la largeur CSS de la table lorsqu'elle est initialisée à une valeur calculée - cette valeur est en pixels, d'où la raison pour laquelle elle ne sera pas redimensionnée avec votre glisser. La raison pour laquelle il le fait est d'arrêter la table et les colonnes (les largeurs de colonne sont également définies) sautant en largeur lorsque vous modifiez la pagination.

Ce que vous pouvez faire pour arrêter ce comportement dans DataTables est de définir le paramètreautoWidth sur false.

$('#example').dataTable( {
  "autoWidth": false
} );

Cela va s'arrêter DataTables en ajoutant ses largeurs calculées à la table, en laissant votre (vraisemblablement) largeur:100% seul et en lui permettant de redimensionner. L'ajout d'une largeur relative aux colonnes aiderait également à arrêter le rebond des colonnes.

Une autre option intégrée dans DataTables consiste à définir l'option sScrollX pour activer le défilement, car DataTables définira la table à 100% de la largeur du conteneur de défilement. Mais vous ne voudrez peut-être pas faire défiler.

La solution de préfet serait si je pouvais obtenir la largeur CSS de la table ( en supposant que l'on est appliqué-c'est-à-dire 100%), mais sans analyser les feuilles de style, Je ne vois pas de moyen de le faire (c'est-à-dire que je veux $().CSS ('width') Pour renvoyer la valeur de la feuille de style, pas la valeur calculée en pixels).

100
répondu Allan Jardine 2016-12-21 10:52:09

Je sais que c'est vieux, mais je viens de résoudre avec ceci:

  var update_size = function() {
    $(oTable).css({ width: $(oTable).parent().width() });
    oTable.fnAdjustColumnSizing();  
  }

  $(window).resize(function() {
    clearTimeout(window.refresh_size);
    window.refresh_size = setTimeout(function() { update_size(); }, 250);
  });

Note: Cette réponse s'applique aux DataTables 1.9

36
répondu Stephen 2016-06-08 20:39:40

Cela a fait l'affaire pour moi.

$('#dataTable').resize()
17
répondu jps 2015-04-08 08:07:50

, Vous devriez essayer celui-ci.

var table = $('#example').DataTable();
table.columns.adjust().draw();

Lien: colonne ajuster dans datatable

7
répondu Chintan Panchal 2016-05-11 12:42:15
$(document).ready(function() {
    $('a[data-toggle="tab"]').on( 'shown.bs.tab', function (e) {
        // var target = $(e.target).attr("href"); // activated tab
        // alert (target);
        $($.fn.dataTable.tables( true ) ).css('width', '100%');
        $($.fn.dataTable.tables( true ) ).DataTable().columns.adjust().draw();
    } ); 
});

Cela fonctionne pour moi, avec "autoWidth": false,

7
répondu Rui Martins 2016-08-26 02:31:02

Utilisez "bAutoWidth": false et passez par l'exemple donné ci-dessous. Il est travaillé pour moi.

Exemple:

$('#tableId').dataTable({
 "bAutoWidth": false
});
4
répondu user2314493 2015-09-08 06:53:22

Pourrait être en retard aussi comme l'autre réponse mais je l'ai fait au début de cette année et la solution que j'ai trouvée utilise css.

    $(window).bind('resize', function () {
        /*the line below was causing the page to keep loading.
        $('#tableData').dataTable().fnAdjustColumnSizing();
        Below is a workaround. The above should automatically work.*/
        $('#tableData').css('width', '100%');
    } );
2
répondu mezzie 2013-06-18 14:05:40

Avez-vous essayé de capturer l'événement div redimensionner et de faire .fnDraw() sur le datatable? {[1] } devrait redimensionner la table pour vous

1
répondu Keith.Abramo 2011-11-26 14:15:44

Je l'ai fait fonctionner comme suit:

Assurez-vous D'abord que dans votre définition dataTable votre tableau aoColumns inclut des données sWidth exprimées en % de pixels non fixes ou ems. Vérifiez ensuite que vous avez défini la propriété bAutoWidth sur false Puis ajoutez ce petit mais DE JS:

update_table_size = function(a_datatable) {
  if (a_datatable == null) return;
  var dtb;
  if (typeof a_datatable === 'string') dtb = $(a_datatable)
  else dtb = a_datatable;
  if (dtb == null) return;

  dtb.css('width', dtb.parent().width());
  dtb.fnAdjustColumSizing();
}

$(window).resize(function() {
  setTimeout(function(){update_table_size(some_table_selector_or_table_ref)}, 250);
});

Fonctionne un régal et mes cellules de table gèrent le white-space: wrap; CSS (qui ne fonctionnait pas sans définir le sWidth, et c'est ce qui m'a conduit à cette question.)

1
répondu Dave Sag 2013-02-13 02:39:57

J'avais exactement le même problème que OP. j'avais un DataTable qui ne réajusterait pas sa largeur après une animation jQuery (toogle ("fast")) redimensionné son conteneur.

Après avoir lu ces réponses, et beaucoup d'essais et d'erreurs, cela a fait l'affaire pour moi:

  $("#animatedElement").toggle(100, function() {    
    $("#dataTableId").resize();
  });

Après de nombreux tests, j'ai réalisé que je devais attendre la fin de l'animation pour que dataTables calcule la largeur correcte.

1
répondu Alberto Hormazabal 2015-10-30 05:19:23

Le code ci-dessous est la combinaison de la réponse de Chintan Panchal avec le commentaire D'Antoine Leclair (en plaçant le code dans l'événement de redimensionnement de windows). (Je n'avais pas besoin du rebounce mentionné par Antoine Leclair, mais cela pourrait être une bonne pratique.)

  $(window).resize( function() {
      $("#example").DataTable().columns.adjust().draw();
  });

C'était l'approche qui a fonctionné dans mon cas.

1
répondu StackOverflowUser 2017-05-19 11:00:59

J'ai eu le même défi. Lorsque j'ai réduit certains menus que j'avais à gauche de mon application web, le datatable ne serait pas redimensionné. Ajout de "autoWidth": l'initialisation de False duirng a fonctionné pour moi.

$('#dataTable').DataTable({'autoWidth':false, ...});
0
répondu Emmanuel Robert Ssebaggala 2017-05-01 22:21:58