外掛範例

這個範例展示如何使用外掛程式來建立自訂欄位類型。 DataTable.ext.searchBuilder.conditions 物件允許將自訂條件新增至搜尋建立器。關於要新增的條件結構的詳細資訊,請參閱 searchBuilder.conditions

在此,辦公室欄位已被賦予自訂欄位類型 office,使用 columns.type。我們也為此 office 類型向搜尋建立器新增了一些使用 select2 的條件。若要使用外掛程式中的自訂篩選器,請選取「辦公室」>「等於」和任何辦公室,您會看到最後一個 select 元素是一個 select2 元素。

如需建立您自己的外掛程式的更多資訊,請參閱此文件

姓名 職位 辦公室 年齡 開始日期 薪資
Tiger Nixon 系統架構師 愛丁堡 61 2011-04-25 $320,800
Garrett Winters 會計 東京 63 2011-07-25 $170,750
Ashton Cox 初級技術作者 舊金山 66 2009-01-12 $86,000
Cedric Kelly 資深 Javascript 開發人員 愛丁堡 22 2012-03-29 $433,060
Airi Satou 會計 東京 33 2008-11-28 $162,700
Brielle Williamson 整合專家 紐約 61 2012-12-02 $372,000
Herrod Chandler 銷售助理 舊金山 59 2012-08-06 $137,500
Rhona Davidson 整合專家 東京 55 2010-10-14 $327,900
Colleen Hurst Javascript 開發人員 舊金山 39 2009-09-15 $205,500
Sonya Frost 軟體工程師 愛丁堡 23 2008-12-13 $103,600
Jena Gaines 辦公室經理 倫敦 30 2008-12-19 $90,560
Quinn Flynn 支援主管 愛丁堡 22 2013-03-03 $342,000
Charde Marshall 區域總監 舊金山 36 2008-10-16 $470,600
Haley Kennedy 資深行銷設計師 倫敦 43 2012-12-18 $313,500
Tatyana Fitzpatrick 區域總監 倫敦 19 2010-03-17 $385,750
Michael Silva 行銷設計師 倫敦 66 2012-11-27 $198,500
Paul Byrd 財務長 (CFO) 紐約 64 2010-06-09 $725,000
Gloria Little 系統管理員 紐約 59 2009-04-10 $237,500
Bradley Greer 軟體工程師 倫敦 41 2012-10-13 $132,000
Dai Rios 人事主管 愛丁堡 35 2012-09-26 $217,500
Jenette Caldwell 開發主管 紐約 30 2011-09-03 $345,000
Yuri Berry 行銷長 (CMO) 紐約 40 2009-06-25 $675,000
Caesar Vance 售前支援 紐約 21 2011-12-12 $106,450
Doris Wilder 銷售助理 雪梨 23 2010-09-20 $85,600
Angelica Ramos 執行長 (CEO) 倫敦 47 2009-10-09 $1,200,000
Gavin Joyce 開發人員 愛丁堡 42 2010-12-22 $92,575
Jennifer Chang 區域總監 新加坡 28 2010-11-14 $357,650
Brenden Wagner 軟體工程師 舊金山 28 2011-06-07 $206,850
Fiona Green 營運長 (COO) 舊金山 48 2010-03-11 $850,000
Shou Itou 區域行銷 東京 20 2011-08-14 $163,000
Michelle House 整合專家 雪梨 37 2011-06-02 $95,400
Suki Burks 開發人員 倫敦 53 2009-10-22 $114,500
Prescott Bartlett 技術作者 倫敦 27 2011-05-07 $145,000
Gavin Cortez 團隊領導 舊金山 22 2008-10-26 $235,500
Martena Mccray 售後支援 愛丁堡 46 2011-03-09 $324,050
Unity Butler 行銷設計師 舊金山 47 2009-12-09 $85,675
Howard Hatfield 辦公室經理 舊金山 51 2008-12-16 $164,500
Hope Fuentes 秘書 舊金山 41 2010-02-12 $109,850
Vivian Harrell 財務總監 舊金山 62 2009-02-14 $452,500
Timothy Mooney 辦公室經理 倫敦 37 2008-12-11 $136,200
Jackson Bradshaw 董事 紐約 65 2008-09-26 $645,750
Olivia Liang 支援工程師 新加坡 64 2011-02-03 $234,500
Bruno Nash 軟體工程師 倫敦 38 2011-05-03 $163,500
Sakura Yamamoto 支援工程師 東京 37 2009-08-19 $139,575
Thor Walton 開發人員 紐約 61 2013-08-11 $98,540
Finn Camacho 支援工程師 舊金山 47 2009-07-07 $87,500
Serge Baldwin 資料協調員 新加坡 64 2012-04-09 $138,575
Zenaida Frank 軟體工程師 紐約 63 2010-01-04 $125,250
Zorita Serrano 軟體工程師 舊金山 56 2012-06-01 $115,000
Jennifer Acosta 初級 Javascript 開發人員 愛丁堡 43 2013-02-01 $75,650
Cara Stevens 銷售助理 紐約 46 2011-12-06 $145,600
Hermione Butler 區域總監 倫敦 47 2011-03-21 $356,250
Lael Greer 系統管理員 倫敦 21 2009-02-27 $103,500
Jonas Alexander 開發人員 舊金山 30 2010-07-14 $86,500
Shad Decker 區域總監 愛丁堡 51 2008-11-13 $183,000
Michael Bruce Javascript 開發人員 新加坡 29 2011-06-27 $183,000
Donna Snider 客戶支援 紐約 27 2011-01-25 $112,000
姓名 職位 辦公室 年齡 開始日期 薪資
  • Javascript
  • HTML
  • CSS
  • Ajax
  • 伺服器端腳本
  • 註解

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

// 將自訂條件新增至辦公室欄位類型 DataTable.ext.searchBuilder.conditions.office = { '=': { // 這個函式決定是否在搜尋中包含條件 isInputValid: function (el, that) { // 如果沒有選取任何選項,或者選取了一個但沒有值,則不包含條件 if ( $(el[0]).has('option:selected').length < 1 || ($(el[0]).has('option:selected').length === 1 && $($(el[0]).children('option:selected')[0]).text().length === 0) ) { return false; } return true; }, // 這是顯示在條件選取中的字串 conditionName: '等於', // 這個函式從 init 函式中建立的 dom 元素收集/設定要用於搜尋的值 inputValue: function (el) { let values = []; for (let element of el) { if ($(element).is('select')) { values.push( $(element) .children('option:selected') .val() ); } } // 返回選取的值 return values; }, // 這個函式初始化條件,特別是其使用所需的任何 dom 元素 init: function (that, fn, preDefined = null) { // 由於 select2 元素將會使用表格中的值來填充, // 我們需要列索引和欄索引。 let column = $(that.dom.data) .children('option:selected') .val(); let indexArray = that.s.dt .rows() .indexes() .toArray(); let added = []; // 宣告 select2 元素 let el = $( '<select class="js-example-placeholder-single js-states form-control" style="width: 300px"/>' ); $(el).prepend('<option></option>'); // 設定必要的偵聽器以觸發搜尋 el.on('select2:select', function () { fn(that, el); }); // 針對每一列 for (let index of indexArray) { // 提取相關資料 let cell = that.s.dt.cell(index, column); let value = { filter: cell.render( that.c.orthogonal.search ), index, text: cell.render('display') }; // 如果我們尚未新增此值 if (added.indexOf(value.filter) === -1) { // 建立要新增到 select 2 元素的選項 let opt = $('<option>', { text: value.text, value: value.filter }) .addClass(that.classes.option) .addClass(that.classes.notItalic); $(el).append(opt); // 記下篩選值,以便我們不再新增它 added.push(value.filter); // 檢查它是否是預定義的,如果是,則選取它 if (preDefined !== null && opt.val() === preDefined[0]) { opt.attr('selected', true); } } } // 當 select 元素插入到 dom 中時,觸發 select2 $(el).on('dtsb-inserted', function () { if ($(el).hasClass('select2-hidden-accessible')) { $(el).select2('destroy'); } $(el).select2({ placeholder: '值' }); if (preDefined !== null) { $(el).val(preDefined[0]); $(el).trigger('input'); } }); return el; }, // 直接比較表格中的值和 select2 元素中的比較值進行搜尋 // 這些值會在 `inputValue` 中檢索 search: function (value, comparison) { return value === comparison[0]; } } }; $('#example').DataTable({ columnDefs: [{ type: 'office', targets: 2 }], layout: { top1: 'searchBuilder' } });

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

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

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

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

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

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

      其他範例