Точный фильтр, когда несколько значений / 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;
}
Другие вопросы по тегам