March 09, 2023 | Created # jQuery DataTables Header 對齊問題 ## 框架 Vue2 ## 狀況描述 載入頁面時,於 mounted 或 watch 週期, 呼叫 API 載入 Table,表格成功產生, 但 Header 寬未對齊內容 columns。 ## 解決方式 ### 方法一 不使用 .dataTable() 的方式產生 table,改在table中直接建立 thead 、tbody,並用 v-for 產生 tr 資料。 ### 方法二 確認 table 區塊外層的 div 是否有使用 v-show 或 v-if 判斷。 若是用 v-if 判斷有無資料才顯示,則會影響 table 載入狀態,導致 Header 無法對齊;若只是用 v-show 判斷頁面權限是否顯示,則不會影響。 #### HTML ```htmlembedded= <div v-cloak> <div class="table-responsive"> <table id="displayTable" class="table table-sm table-striped table-bordered table-hover text-nowrap text-center w-100"></table> </div> </div> ``` #### JavaScript ##### 設定 DataTables 參數 ```javascript= setDataTableParams() { this.dataTableParams = { data: this.responseData, dom: `<"row my-2"<"container d-flex justify-content-between">B> <"row"<"col-sm-12" tr >> <"row"<"col-sm-12 col-md-5"i><"col-sm-12 col-md-7"p>>`, buttons: [ { extend: 'excelHtml5', text: '下載', exportOptions: { columns: [0, ':visible'] }, } ], columns: [ { data: 'columns1', title: '欄位1' }, { data: 'columns2', title: '欄位2', visible: false }, ], }; } ``` ##### 產生 DataTables ```javascript= this.responseData = data; this.setDataTableParams(); if (this.dataTable) this.dataTable.destroy(); this.dataTable = $('#displayTable').DataTable( Object.assign(new DatatableParameterGenerate(this.pageName), this.dataTableParams) ).columns.adjust(); ``` ###### tags: [`jquery`](https://hackmd.io/@elzuoc?tags=%5B%22jquery%22%5D) [`datatables`](https://hackmd.io/@elzuoc?tags=%5B%22datatables%22%5D) [`javascript`](https://hackmd.io/@elzuoc?tags=%5B%22javascript%22%5D) [`vue2`](https://hackmd.io/@elzuoc?tags=%5B%22vue2%22%5D)