基於Mottie答覆,並tablesorter.filter.getOptions
源,我想出了這個。將filter-metaselect
類添加到我的列th
中,可以使用單元td
中的data-value
屬性作爲選擇選項。解析/未解析的文本仍然可以使用。請注意,getOptions
的子部分已被省略,因爲我目前沒有使用功能。
表格單元格:
<td data-value="1">
Projet actif
</td>
選擇選項:
<option value="1" parsed="projet actif" data-function-name="1">Projet actif</option>
的Javascript:
filter_selectSource: {
".filter-metaselect": function (table, column, onlyAvail) {
table = $(table)[0];
var rowIndex, tbodyIndex, len, row, cache, indx, child, childLen, colData,
c = table.config,
wo = c.widgetOptions,
arry = [];
for (tbodyIndex = 0; tbodyIndex < c.$tbodies.length; tbodyIndex++) {
cache = c.cache[tbodyIndex];
len = c.cache[tbodyIndex].normalized.length;
// loop through the rows
for (rowIndex = 0; rowIndex < len; rowIndex++) {
// get cached row from cache.row (old) or row data object
// (new; last item in normalized array)
row = cache.row ?
cache.row[ rowIndex ] :
cache.normalized[ rowIndex ][ c.columns ].$row[0];
// check if has class filtered
if (onlyAvail && row.className.match(wo.filter_filteredRow)) {
continue;
}
// Get the column data attributes
if (row.getElementsByTagName('td')[column].getAttribute('data-value')) {
colData = row.getElementsByTagName('td')[column].getAttribute('data-value');
} else {
colData = false;
}
// get non-normalized cell content
if (wo.filter_useParsedData ||
c.parsers[column].parsed ||
c.$headerIndexed[column].hasClass('filter-parsed')) {
arry[ arry.length ] = {
value : (colData) ? colData : cache.normalized[ rowIndex ][ column ],
text : cache.normalized[ rowIndex ][ column ]
};
// child row parsed data
/* TODO */
} else {
arry[ arry.length ] = {
value : (colData) ? colData : cache.normalized[ rowIndex ][ c.columns ].raw[ column ],
text : cache.normalized[ rowIndex ][ c.columns ].raw[ column ]
};
// child row unparsed data
/* TODO */
}
}
}
// Remove duplicates in `arry` since using an array of objects
// won't do it automatically
var arr = {};
for (var i=0, len=arry.length; i < len; i++)
arr[arry[i]['text']] = arry[i];
arry = new Array();
for (var key in arr)
arry.push(arr[key]);
return arry;
}
}
這不是_exactly_什麼我要找的,但它給了我一個想法如何做到這一點。在兩個'filter_'選項中,您可以爲'th'元素設置查詢選擇器而不是col標識符?如果找不到選擇器,它不會崩潰?或者如果有兩個或更多列使用相同的選擇器? –
您可以使用css選擇器代替列索引,例如'filter_selectSource:{'.foo':function(){...}}',如果這就是你的意思。 – Mottie
是的。你能把我指向'getOptions'來源嗎? –