DataTablesでvisibleが反映されない時の対処
環境
- DataTables(https://datatables.net/) 1.10.18
現象
- DataTablesのカラムに設定したvisibleが反映されない
- ブラウザのキャッシュをクリアしても反映されない
例: 以下のコードで、非表示にしているはずの10列目が表示されてしまう
$(function() {
$('#foo-table').DataTable({
stateSave: true, // 表示状態を保持
columnDefs: [
// 10列目を非表示
{targets: 10, visible: false},
],
});
});
原因
- 一緒に設定されている
stateSave
オプションは、表示に関する全ての初期設定を上書きするため - 公式フォーラムに上記のように書いてあるが詳細不明。少なくとも
stateSave: true
によって、10列目が表示されている状態が保持されてしまっているらしい。
対策
stateSaveParams
オプションを使って、stateSave
の対象からcolumnsのvisibleを外す。
$(function() {
$('#foo-table').DataTable({
stateSave: true, // 表示状態を保持
// stateSaveの対象からvisibleを外す
stateSaveParams: function ( settings, data ) {
for ( var i=0, ien=data.columns.length ; i<ien ; i++ ) {
delete data.columns[i].visible;
}
},
columnDefs: [
// 10列目を非表示
{targets: 10, visible: false},
],
});
});