素晴らしいDataTables jQueryプラグインを使用しています。 http://datatables.net/ FixedColumnsおよびKeyTableエクストラが追加されました。
現在、ウィンドウのサイズが変更されると、テーブルのサイズがきれいに変更されます。ただし、テーブルのdivはjQueryアニメーションによって幅を変更することもできます。テーブルのサイズを変更する方法は見つかりませんでした。元の幅で停滞したままです。ページロードの前にコードのdiv幅を変更した場合にのみ、テーブルのサイズが正しく変更されます。
ウィンドウの幅とdivの幅の両方に応じてDataTableのサイズをオンザフライで変更するにはどうすればよいですか?前もって感謝します! :-)
何が起こっているのかは、DataTablesが計算値に初期化されるときにテーブルのCSS幅を設定していることです-その値はピクセル単位であるため、ドラッグしてもサイズが変更されません。これを行う理由は、ページネーションを変更するときにテーブルと列(列の幅も設定されている)の幅がジャンプするのを止めるためです。
DataTablesでこの動作を停止するためにできることは、 autoWidth パラメーターをfalseに設定することです。
$('#example').dataTable( {
"autoWidth": false
} );
これにより、DataTablesが計算された幅をテーブルに追加するのを停止し、(おそらく)幅:100%のままにして、サイズを変更できるようにします。列に相対的な幅を追加すると、列のバウンドを停止するのにも役立ちます。
DataTablesに組み込まれているもう1つのオプションは、sScrollXオプションを設定してスクロールを有効にすることです。DataTablesはテーブルをスクロールコンテナーの100%幅に設定するためです。しかし、スクロールしたくないかもしれません。
完全な解決策は、テーブルのCSS幅を取得できる場合です(1つが適用されていると仮定すると、つまり100%)が、スタイルシートを解析せずに、それを行う方法がわかりません(つまり、基本的に$()が必要です) .css( 'width')は、ピクセル計算値ではなく、スタイルシートから値を返します)。
私はこれが古いことを知っていますが、これで解決しました:
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);
});
注:この回答はDataTables 1.9に適用されます
これは私のためにトリックをしました。
$('#dataTable').resize()
$(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();
} );
});
私にとっては、"autoWidth": false,
つかいます "bAutoWidth": false
そして、以下の例をご覧ください。それは私のために働いています。
例:
$('#tableId').dataTable({
"bAutoWidth": false
});
他の回答のように遅れることもありますが、今年初めにこれを行いました。私が思いついた解決策は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%');
} );
私も同じ挑戦をしました。 Webアプリの左側にあるメニューを折りたたんだときに、データテーブルのサイズが変更されませんでした。 「autoWidth」の追加:誤った初期化初期化が機能しました。
$('#dataTable').DataTable({'autoWidth':false, ...});
私はこれを次のように動作させました:
最初に、dataTable
の定義で、aoColumns
配列に、固定ピクセルまたはemではない%として表されるsWidth
データが含まれていることを確認してください。次に、bAutoWidth
プロパティをfalse
に設定していることを確認します。次に、この小さな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);
});
うまく機能し、私のテーブルセルはwhite-space: wrap;
CSSを処理します(sWidth
を設定しないと機能しなかったため、この質問に至りました)。
OPとまったく同じ問題を抱えていました。 jQueryアニメーション(toogle( "fast"))がコンテナのサイズを変更した後、幅を再調整しないDataTableがありました。
これらの答えと多くの試行錯誤を読んだ後、これは私にとってトリックでした:
$("#animatedElement").toggle(100, function() {
$("#dataTableId").resize();
});
多くのテストの後、dataTablesが正しい幅を計算するためにアニメーションが終了するのを待つ必要があることに気付きました。
Div resizeイベントをキャプチャして、データテーブルで.fnDraw()
を実行しようとしましたか? fnDraw
はテーブルのサイズを変更する必要があります
以下のコードは、Chintan Panchalの回答とAntoine Leclairのコメント(windows resizeイベントにコードを配置する)の組み合わせです。 (Antoine Leclairが言及したデバウンスは必要ありませんでしたが、ベストプラクティスになる可能性があります。)
$(window).resize( function() {
$("#example").DataTable().columns.adjust().draw();
});
これが私の場合に有効なアプローチでした。