Положение:
Я немного играю, используя библиотеку Мэтта Круза, которую я нашел на странице Сортировка таблиц, фильтрация и т. Д. по URL http://javascripttoolbox.com/lib/table/source.php.
Это работает довольно хорошо, но я хотел бы реализовать небольшое улучшение (возможно, было бы лучше использовать формулировку "новая функция"), и я не знаю, с чего начать, потому что я новичок в js и что js В файле используются более сложные программные операторы, которые я до конца не понимаю, по крайней мере пока.
У меня есть один HTML-файл с несколькими таблицами в нем. Некоторые из них фильтруются и сортируются благодаря этой библиотеке. Количество таблиц может варьироваться, количество столбцов (полей) в каждой таблице также может различаться, и количество записей (строк) каждой таблицы также может изменяться. Конечно, содержание в каждой таблице тоже разное.
Помещая определенный класс css в выбранный мной элемент th целевого столбца, я указываю библиотеке Мэтта Круза создать в этом столбце элемент html, который заполняется из списка HTML-элементы, которые динамически вычисляются самим js-методом путем выбора отдельного и единственного значения каждой записи для этого столбца.
Когда я хочу применить фильтр к таблице на основе определенного столбца, я просто должен выбрать относительный из соответствующего поля , и таблица будет соответственно отфильтрована, как я ожидаю. Это работает, просто скрывая записи (строки html) с несоответствующими критериями в этом конкретном столбце с применением фильтра к нему. Конечно, при необходимости можно использовать фильтры для нескольких столбцов одновременно. Он работает очень похоже на MS Excel.
проблема
Когда я применяю фильтр к столбцу, раскрывающиеся поля со списком фильтра других столбцов (элементы html, содержащие скомпилированные параметры для фильтрации других столбцов) продолжают отображать все параметры вместо того, чтобы скрывать те, которые отфильтрованы в таблице и больше не нужны. Таким образом, становится довольно сложно, особенно в сложных таблицах, выбирать критерии фильтрации из других столбцов, потому что пользователь сам должен понять, какие критерии нельзя использовать, потому что соответствующие строки уже скрыты фильтром, уже примененным к другому столбцу.
Еще одна вещь: когда я редактирую содержимое одной или нескольких ячеек таблицы, фильтр соответствующего столбца (столбцов) не обновляется, чтобы соответствовать выполненному редактированию, но кажется, что он остается неизменным.
Цель этого вопроса
Если я использую электронную таблицу (например, LibreOffice Calc, или MS Excel, или онлайн-таблицу Google, или другое), когда я фильтрую столбец, фильтруются и другие выпадающие меню других столбцов. Если я где-то удаляю фильтр, выпадающие фильтры других столбцов обновляются соответственно.
Все это поведение я хотел бы внедрить в библиотеку Мэтта Крузе. Таким образом, было бы легче фильтровать по нескольким столбцам, поскольку в полях, содержащих критерии фильтра других столбцов, будут отображаться только критерии фильтра, оставленные всеми ранее примененными фильтрами.
Что я уже пробовал
Я пытался реализовать что-то для этого, но это было настолько медленно, что мне было слишком стыдно за время его выполнения, и я уже удалил весь алгоритм, который создал.
Для сравнения с использованием алгоритма библиотеки Мэтта Крузе требуется всего несколько моментов для компиляции всех данных таблиц в элементы фильтра (также для всех таблиц). Но алгоритм, который я реализовал, требовал более 30-40 секунд только для одной таблицы. Слишком неэффективно.В сущности, я написал несколько «циклов for», которые для каждого в каждой отфильтрованной таблице сравнивают значение параметра с каждым из соответствующего столбца, и, если обнаруживает, что Mach сохраняет параметр видимым, в противном случае он скрывает этот элемент в.Я прикрепил этот алгоритм к событию change каждого, поэтому, когда я щелкнул и выбрал, событие было запущено, и все содержимое таблицы было обновлено.Это сработало, как и ожидалось, но, как я уже сказал, то, что я реализовал, было намного медленнее.
Итак, вопрос:
Как мне изменить файл js Мэтта Крузе для реализации функции, которую я хочу сохранитьмаксимально возможная производительность?
(Если Мэтт Крузе читает это, не стесняйтесь принять эту идею и реализовать новые функции, необходимые выше: я уверен, что это будет высоко оценено).
Спасибо всем заранее за вклад.