Итак, для элементов, не относящихся к дате, ваш метод состоит в том, чтобы вычислить селектор jquery для элементов, которые должны быть включены, а затем применить это к элементам данных.
Весьма приятный подход в том, что вы создаете несколькоФильтры jquery при создании переменной 'include'.
Сложность применения одного и того же метода для дат состоит в том, что это приводит к тесту диапазона, который трудно поместить в селектор jquery. Мое решение состоит в том, чтобы создать массив соответствующих значений даты-даты и выполнить второй фильтр на последнем шаге.
Изменения:
Шаг 1. Определите новую переменную:
var dateInclude = [];
Шаг 2. В разделе, где вы определяете, является ли дата действительной, вставьте действительные значения в массив фильтров dataInclude
//exclude when date is out of range
$statsSection.each(function () {
var sectionDate = $(this).data('date');
if (process(sectionDate) > process(selectedDate)) {
dateInclude.push("[data-date='" + sectionDate + "']");
}
});
Шаг 3: В разделе вывода мы теперь объединяемdateInclude в качестве второго фильтра. Обратите внимание, что ваши начальные фильтры работают как логическое И, но фильтры даты должны работать как логическое ИЛИ. Поэтому фильтр dateInclude применяется в операции show () в качестве второго шага.
$statsSection.hide();
include = (dateInclude.length > 0 && include === '' ? '*' : include);
dateInclude = (dateInclude.length === 0 ? ['*'] : dateInclude );
$('#info').html(include + ' :: ' + dateInclude.join());
$statsSection.filter(include).filter(dateInclude.join()).show();
Первая строка (ниже) преимущественно скрывает все div данных.
$statsSection.hide();
Следующие строки (ниже) работают с фильтрами, чтобы гарантировать, что они оба имеютстоимость. Если фильтры даты отсутствуют, мы вводим сопоставление всех и то же самое для фильтров включения для других полей выбора.
include = (dateInclude.length > 0 && include === '' ? '*' : include);
dateInclude = (dateInclude.length === 0 ? ['*'] : dateInclude );
Наконец, мы объединяем это, как показано ниже.
$statsSection.filter(include).filter(dateInclude.join()).show();
Чтобы помочь визуализировать его, я добавил некоторые выходные данные к скрипке
Например, выбор server = NicNicFunGame и date = последние шесть месяцев создает фильтры:
$statsSection.filter("[data-server='NicNicFunGame']").filter("[data-date='27/09/2019'],[data-date='03/07/2019']").show();
См. Мою рабочую скрипку наhttps://jsfiddle.net/JamesE442/qktfbp15/38/