На веб-странице stati c offline HTML у меня есть список сложных HTML строк, хранящихся в массиве JavaScript. Каждая строка может go до 28k символов, а может до 10k строк. Это выглядит так:
[
"[...]rem;\">Jun 3, 2020 5:34 AM</span></div><div>Here are the requirements for t[...]",
"[...]rem;\"></div><div>The design <span style=\"color:red\">proposals are actual[...]",
"[...]un 3, 2020 5:35 AM</span></div><div></div>\n\n<pre>var response = Request.C[...]"
// ... many more
]
На самом деле это сообщения, хранящиеся в HTML. Я должен найти способ отфильтровать их, поэтому, например, если я ищу те, которые содержат слова « дизайн » и « предложения », я получаю второе сообщение из списка выше в результате. Искомые слова могут быть в любой позиции в строке HTML, например, words.every(w => htmlString.indexOf(w) >= 0)
. Обратите внимание, что я не могу использовать этот код, потому что все теги HTML будут включены в поиск indexOf
, и это может привести к ложным срабатываниям.
Поскольку код JavaScript выполняется в браузере, у меня есть доступ к DOM. Отфильтрованные сообщения будут отображаться после фильтрации с использованием разбивки на страницы.
Моя первая идея заключалась в l oop через все строки и:
- преобразовать их в HTML элементы с использованием
document.createElement
, - Извлеките удобочитаемый текст с помощью
innerText
, - Ищите слова в этом сглаженном тексте, поскольку теперь без тегов HTML это намного проще, используя
indexOf
.
Тестировал, работает хорошо. Но меня беспокоит производительность этого алгоритма, особенно с огромным количеством сообщений.
Видите ли вы какой-либо другой способ отфильтровать сообщение без необходимости конвертировать все сообщения в элементы DOM?