Точный фильтр, когда несколько значений / HTML-элементов в ячейке
Это может быть связано больше с DataTables, чем конкретно с YADCF, но я прошу это здесь как очевидное улучшение, если функция не существует.
У меня есть столбцы, которые могут содержать несколько значений тегов, как в примерах YADCF. Фильтры для фильтрации по этим тегам генерируются правильно.
JSFiddle здесь https://jsfiddle.net/wallacio/622704ep/6/
Смотрите колонки под названием Area и Rig (извините за ужасающие цвета...!)
Если я хочу видеть только события на юге, мне нужно использовать filter_match_mode: "exact"
(исключить тех, кто на юго-западе, юго-востоке и т. д.)
Существует событие (8-е место внизу в нефильтрованном виде), которое содержит теги "Юг" и "Юго-Восток", событие, содержащее теги Юг и Юго-Восток
При фильтрации по "Югу" это событие не появляется, предположительно потому, что точный фильтр сопоставляется с содержимым ячейки в целом, а не с каждым отдельным элементом HTML внутри нее.
Я мог бы изменить filter_match_mode на "содержит", но это привело бы к появлению событий, помеченных как "Юго-восточный" и т. Д., Что нежелательно.
У меня был трал через источник, и я вижу, что это учитывается при создании параметров фильтра, но, очевидно, не при фильтрации, поэтому мне интересно, является ли это ограничением, вызванным тем, как реализованы фильтры DataTables.
1 ответ
Вы можете использовать filter_type: 'custom_func',
и написать свою собственную логику фильтрации для этого конкретного столбца
column_number: 0,
filter_type: 'custom_func',
custom_func: myCustomFilterFunction,
data: ['one', 'two', 'three']
где myCustomFilterFunction
выглядит примерно так
function myCustomFilterFunction(filterVal, columnVal) {
var found = false;
if (columnVal === '') {
return true;
}
switch (filterVal) {
case 'one':
found = //some logic goes here
break;
case 'two':
found = //some logic goes here
break;
case 'three':
found = //some logic goes here
break;
default:
found = false;
break;
}
if (found) {
return true;
}
return false;
}