Сортировка таблиц, фильтрация, библиотека Etc Matt Kruse - PullRequest
1 голос
/ 14 июня 2019

Положение:

Я немного играю, используя библиотеку Мэтта Круза, которую я нашел на странице Сортировка таблиц, фильтрация и т. Д. по 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 Мэтта Крузе для реализации функции, которую я хочу сохранитьмаксимально возможная производительность?

(Если Мэтт Крузе читает это, не стесняйтесь принять эту идею и реализовать новые функции, необходимые выше: я уверен, что это будет высоко оценено).

Спасибо всем заранее за вклад.

...