2018 年 5 月 8 日 星期二
作者:Colin Marks

SearchFade

大家好,我是 Colin,我於去年底加入 DataTables 團隊,負責測試並在 DataTables 論壇中提供客戶支援。

最近有個問題 詢問 DataTables 是否可以顯示符合篩選條件和不符合的記錄,而不是僅顯示符合的篩選結果,並在行上使用一些顏色或陰影來區分兩者。雖然這不是 DataTables 的現成功能,但透過使用其廣泛的自訂功能(回呼和 API 方法),已建立了 SearchFade 外掛程式。

如下面的範例所示,不符合篩選結果的項目會被指定 notMatched CSS 類別,以降低其不透明度。您可以透過修改該類別,輕鬆地將其更改為顯示不同的字體或不同的背景顏色。SearchFade 完全相容於所有其他 DataTables 功能和自訂設定,因为它只會影響當前顯示的列。

姓名職位辦公室薪資
Tiger Nixon系統架構師愛丁堡$320,800
Garrett Winters會計師東京$170,750
Ashton Cox初級技術作家舊金山$86,000
Cedric Kelly資深 Javascript 開發人員愛丁堡$433,060
Airi Satou會計師東京$162,700
Brielle Williamson整合專家紐約$372,000
Herrod Chandler銷售助理舊金山$137,500
Rhona Davidson整合專家東京$327,900
Colleen HurstJavascript 開發人員舊金山$205,500
Sonya Frost軟體工程師愛丁堡$103,600
Jena Gaines辦公室經理倫敦$90,560
Quinn Flynn支援主管愛丁堡$342,000
Charde Marshall區域總監舊金山$470,600
Haley Kennedy資深行銷設計師倫敦$313,500
Tatyana Fitzpatrick區域總監倫敦$385,750
Michael Silva行銷設計師倫敦$198,500
Paul Byrd財務長 (CFO)紐約$725,000
Gloria Little系統管理員紐約$237,500
Bradley Greer軟體工程師倫敦$132,000
Dai Rios人事主管愛丁堡$217,500
Jenette Caldwell開發主管紐約$345,000
Yuri Berry行銷長 (CMO)紐約$675,000
Caesar Vance售前支援紐約$106,450
Doris Wilder銷售助理雪梨$85,600
Angelica Ramos執行長 (CEO)倫敦$1,200,000
Gavin Joyce開發人員愛丁堡$92,575
Jennifer Chang區域總監新加坡$357,650
Brenden Wagner軟體工程師舊金山$206,850
Fiona Green營運長 (COO)舊金山$850,000
Shou Itou區域行銷東京$163,000
Michelle House整合專家雪梨$95,400
Suki Burks開發人員倫敦$114,500
Prescott Bartlett技術作家倫敦$145,000
Gavin Cortez團隊領導舊金山$235,500
Martena Mccray售後支援愛丁堡$324,050
Unity Butler行銷設計師舊金山$85,675
Howard Hatfield辦公室經理舊金山$164,500
Hope Fuentes秘書舊金山$109,850
Vivian Harrell財務總監舊金山$452,500
Timothy Mooney辦公室經理倫敦$136,200
Jackson Bradshaw總監紐約$645,750
Olivia Liang支援工程師新加坡$234,500
Bruno Nash軟體工程師倫敦$163,500
Sakura Yamamoto支援工程師東京$139,575
Thor Walton開發人員紐約$98,540
Finn Camacho支援工程師舊金山$87,500
Serge Baldwin資料協調員新加坡$138,575
Zenaida Frank軟體工程師紐約$125,250
Zorita Serrano軟體工程師舊金山$115,000
Jennifer Acosta初級 Javascript 開發人員愛丁堡$75,650
Cara Stevens銷售助理紐約$145,600
Hermione Butler區域總監倫敦$356,250
Lael Greer系統管理員倫敦$103,500
Jonas Alexander開發人員舊金山$86,500
Shad Decker區域總監愛丁堡$183,000
Michael BruceJavascript 開發人員新加坡$183,000
Donna Snider客戶支援紐約$112,000

使用方法

在您的表格中使用 SearchFade 很容易。首先,將外掛程式的 Javascript 和 CSS 包含在您的頁面上

CSS
JS

若要啟用並使用 SearchFade 輸入,請利用 layout 將控制項定位在表格周圍 - 例如,這將取代 DataTables 的內建預設搜尋

$('#myTable').DataTable({
    layout: {
        topEnd: 'searchFade'
    }
});

如果您使用的是 DataTables 的舊版 1.x,您可以使用 dom 選項,並使用 F 來定位 SearchFade!

$('#myTable').DataTable({
    dom: 'Flfrtip'
});

或者,您可以在表格初始化階段宣告它,然後將搜尋元素的節點放置在您選擇的任何位置(如果您使用的是 Bootstrap 或 Semantic UI 等樣式整合,目前這是較簡單的選項)

var table = $('#myTable').DataTable({
    searchFade: true
});

table.searchFade().node().appendTo('body');

實作

SearchFade 使用不同的輸入元素來輸入搜尋詞,因為標準搜尋輸入會移除不符合的記錄且無法設定。在上面的範例初始化中,標準搜尋仍然可用,但可以透過將 f 選項從 dom 字串中移除來移除。

下面的程式碼使用 API 來實作我們的 SearchFade 搜尋。由於列醒目提示僅與可見列有關,因此只要在輸入元素中按下鍵盤,或重新繪製表格(可能是因為頁面變更),就會檢查所有可見列是否包含搜尋詞,如果未符合,則會指定不同的 CSS 樣式(預設情況下,這會降低不透明度)。

var table = new $.fn.dataTable.Api(settings);
var searchFade = $('<div class="searchFade"/>');

table.settings()[0].searchFadeNode = searchFade;

_draw(table, searchFade);

// Trigger a search
searchFade.on('keyup redraw', 'input', function() {
    table.rows(':visible').every(function(rowIdx, tableLoop, rowLoop) {
        var present = true;
        if ($('.searchFadeInput' + table.settings()[0].sTableId).val().length) {
            present = table
                .row(rowIdx)
                .data()
                .some(function(v) {
                    return v.match(new RegExp($('.searchFadeInput' + table.settings()[0].sTableId).val(), 'i')) != null;
                });
        }
        $(table.row(rowIdx).node()).toggleClass('notMatched', !present);
    });
});

table.on('draw', function() {
    $('.searchFadeInput').trigger('redraw');
});

// API method to get the searchFade container node
this.node = function() {
    return searchFade;
};

我們希望您喜歡這個新的外掛程式,並有機會在您的表格上使用它。如果您有任何問題或意見,請在 DataTables 論壇中留言。

祝您編碼愉快!!!