我正在使用jQuery DataTables插件。jQuery DataTables - 包含文本字段的列的自定義過濾器
我想爲包含文本字段的列創建自定義過濾器。
我想根據列中輸入字段的值屬性進行過濾。
我需要這樣做,所以我可以避免讓過濾器匹配html到搜索模式。
舉例來說,我不能搜索ID或形式沒有找到每一行(文字形式在ID被找到屬性的文本字段的)。
我發現很多問題和論壇,說mData是我的問題的答案。
無論我嘗試什麼,我都無法使它工作。
這是我如何定義我的專欄:
prefColumns: [ { bSortable: true, bSearchable: false, sSortDataType: 'dom-checkbox' },
{ bSortable: true, bSearchable: true },
{ bSortable: true, bSearchable: true, sSortDataType: 'dom-text' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false }
]
我給你上面的陣列到aoColumns屬性是這樣的:
// Find all the pref tables we want to turn into DataTables
var $categoryTables = $('table[id$="cat-table"]');
// Create a jQuery dataTable for each pref category
$categoryTables.dataTable({
sScrollY: "350px",
bPaginate: false,
bAutoWidth: false,
sDom: '<"prefsFilter"f>t',
aoColumns: prefColumns,
aaSorting: [[ 1, 'asc' ]]
});
,一切工作正常。
下面是上面使用(以防萬一)我的自定義排序功能:
$.fn.dataTableExt.afnSortData['dom-text'] = function (oSettings, iColumn) {
var aData = [];
$('td:eq('+iColumn+') input', oSettings.oApi._fnGetTrNodes(oSettings)).each(function() {
aData.push(this.value);
});
return aData;
};
// Add a custom sort function for columns that might contain checkbox fields.
$.fn.dataTableExt.afnSortData['dom-checkbox'] = function (oSettings, iColumn) {
var aData = [];
$('td:eq('+iColumn+')', oSettings.oApi._fnGetTrNodes(oSettings)).each(function() {
var $box = $(':checkbox', $(this));
if ($box.length === 0) {
aData.push("1");
}
else {
aData.push($box.is(':checked') ? "2" : "3");
}
});
return aData;
};
// Add a custom sort function for columns with slider buttons
$.fn.dataTableExt.afnSortData['slider'] = function (oSettings, iColumn) {
var aData = [];
var s = 'input:hidden[id$="State"]';
$('td:eq('+iColumn+') ' + s, oSettings.oApi._fnGetTrNodes(oSettings)).each(function() {
aData.push(this.value);
});
return aData;
};
的第三列在我的表是包含文本字段中的一個。
在試圖使用MDATA財產,我一直在修改我的列定義與這樣的東西:
prefColumns: [ { bSortable: true, bSearchable: false, sSortDataType: 'dom-checkbox' },
{ bSortable: true, bSearchable: true },
// add a mData property to the third column
{ bSortable: true, bSearchable: true, sSortDataType: 'dom-text',
mData: function (src, type, val) { return type === 'filter' ? $(src).attr('value') : src; } },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false, sSortDataType: 'slider' },
{ bSortable: true, bSearchable: false }
]
我已經試過類似上面並沒有什麼似乎一堆東西像文檔和在線示例一樣工作。
沒有我發現在任何論壇或其他問題的工作。
如果有人能給我一些關於我誤解的線索,我會非常感激。
非常感謝。我在文檔中看到了精確的代碼,但從來不清楚'disp'和'filter'總是可用於'source'參數的屬性。我想我認爲它們只是與文檔中給出的具體示例相關的屬性。再次感謝您向我展示燈光! – jahroy