Первая возможность
Сделайте то же самое, что вы сделали с одним словом. Разделите ввод пользователя на отдельные слова и протестируйте каждое из них.
Вторая возможность - оптимизированная фильтрация
Обход всей таблицы кажется очень трудоемким, что довольно легко можно было бы оптимизировать с небольшими накладными расходами в начале. Поскольку объекты javascript являются своего рода ассоциативными массивами, вы можете сделать это:
- Когда страница загружает таблицу перемещения и анализирует текст каждой ячейки. Синтаксический анализ должен выполняться с использованием регулярных выражений, поскольку это упростит исключение любой пунктуации и аналогичных
var rx = /([a-z]+)/gi
. Вы также можете легко исключить любые односимвольные слова здесь var rx = /([a-z]{2,})/gi
.
- Хранить каждое слово в ассоциативном объекте по отношению к строке.
- Фильтр по этому объекту.
Как должен выглядеть ваш ассоциативный объект:
var data = {
"tomorrow": [1, 2, 3],
"will": [3, 5, 6],
"be": [78],
"sunny": [3, 9, 19],
...
};
массивы каждого слова соответствуют индексу строки таблицы. Поэтому, когда пользователь вводит любые данные в текстовое поле, вы можете легко разделить их на отдельные слова и получить все массивы:
var filter = $("#search_filter").val().split(" ");
var firstWordRows = data[filter[0]];
Тогда все, что вам нужно сделать, это пересечь эти массивы и спрятать все строки, кроме полученных.
Хорошо, что вы можете определить стоп слов, которые вы не фильтруете (например, in, a, of, at, etc.) ...
Зачем вообще беспокоиться о втором? Если вероятность того, что страница будет отфильтрована несколько раз, а не загружена, то эти издержки при загрузке страницы сделают фильтрацию быстрой. Фильтрация будет очень быстрой и потребляет меньше ресурсов процессора.
Предложение
Я настоятельно рекомендую вам использовать библиотеку Javascript, которая сделает вашу жизнь намного проще. Например, используйте jQuery, у которого нет длинной кривой обучения и который очень хорошо работает вместе с имеющимися у вас скриптами.