帶有 StateSave 的子行

DataTables API 有許多方法可以將子行附加到 DataTable 中的行。這可以用來顯示關於一行的額外資訊,對於您希望傳達比主表格中空間更多的行資訊的情況很有用。

下面的範例使用了 stateSaverow().child 方法,首先檢查是否已顯示行,如果是,則隱藏它 (row().child.hide()),否則顯示它 (row().child.show())。此範例中子行的內容由 format() 函式定義,但您可以將其替換為您想要顯示的任何內容,例如,包括向伺服器發出 Ajax 呼叫以獲取任何額外資訊。

由於 state save 元素,可以跨重新載入維護此範例的狀態。使用者必須為 requestChild.dt 添加一個監聽器,以任何他們喜歡的格式顯示行。

監聽器也必須在表格初始化之前設定,否則當嘗試載入狀態時,監聽器中設定的功能將不可用。

姓名 職位 辦公室 薪資
姓名 職位 辦公室 薪資
  • Javascript
  • HTML
  • CSS
  • Ajax
  • 伺服器端腳本
  • 註解

下面顯示的 Javascript 用於初始化此範例中顯示的表格

// 格式化行詳細資訊的函式 - 根據需要修改 function format(d) { // `d` 是該行的原始資料物件 return ( '<dl>' + '<dt>全名:</dt>' + '<dd>' + d.name + '</dd>' + '<dt>分機號碼:</dt>' + '<dd>' + d.extn + '</dd>' + '<dt>額外資訊:</dt>' + '<dd>以及任何其他詳細資訊(圖片等)...</dd>' + '</dl>' ); } var table = $('#example').DataTable({ ajax: '../ajax/data/objects.txt', columns: [ { className: 'dt-control', orderable: false, data: null, defaultContent: '' }, { data: 'name' }, { data: 'position' }, { data: 'office' }, { data: 'salary' } ], order: [[1, 'asc']], rowId: 'id', stateSave: true }); table.on('requestChild.dt', function (e, row) { row.child(format(row.data())).show(); }); // 新增用於開啟和關閉詳細資訊的事件監聽器 $('#example tbody').on('click', 'td.dt-control', function () { var tr = $(this).closest('tr'); var row = table.row(tr); if (row.child.isShown()) { // 此行已開啟 - 關閉它 row.child.hide(); } else { // 開啟此行 row.child(format(row.data())).show(); } });
// 格式化行詳細資訊的函式 - 根據需要修改 function format(d) { // `d` 是該行的原始資料物件 return ( '<dl>' + '<dt>全名:</dt>' + '<dd>' + d.name + '</dd>' + '<dt>分機號碼:</dt>' + '<dd>' + d.extn + '</dd>' + '<dt>額外資訊:</dt>' + '<dd>以及任何其他詳細資訊(圖片等)...</dd>' + '</dl>' ); } let table = new DataTable('#example', { ajax: '../ajax/data/objects.txt', columns: [ { className: 'dt-control', orderable: false, data: null, defaultContent: '' }, { data: 'name' }, { data: 'position' }, { data: 'office' }, { data: 'salary' } ], order: [[1, 'asc']], rowId: 'id', stateSave: true }); table.on('requestChild.dt', function (e, row) { row.child(format(row.data())).show(); }); // 新增用於開啟和關閉詳細資訊的事件監聽器 table.on('click', 'td.dt-control', function (e) { let tr = e.target.closest('tr'); let row = table.row(tr); if (row.child.isShown()) { // 此行已開啟 - 關閉它 row.child.hide(); } else { // 開啟此行 row.child(format(row.data())).show(); } });

除了上述程式碼外,還載入了以下 Javascript 函式庫檔案,以便在此範例中使用

    下面顯示的 HTML 是原始 HTML 表格元素,在它被 DataTables 增強之前

    此範例除了從函式庫檔案(如下所示)載入的 CSS 之外,還使用了一些額外的 CSS,以便正確顯示表格。使用的額外 CSS 如下所示

    載入了以下 CSS 函式庫檔案,以便在此範例中使用,以提供表格的樣式

      此表格透過 Ajax 載入資料。下面顯示的是已載入的最新資料。當任何額外資料載入時,此資料將自動更新。

      下面顯示用於執行此表格伺服器端處理的腳本。請注意,這只是一個使用 PHP 的範例腳本。伺服器端處理腳本可以使用任何語言編寫,並使用DataTables 文件中描述的協定

      其他範例