Я пытаюсь выделить запрос внутри текста, полученного из ответа ajax, перед тем как создать HTML-код и вставить его в DOM.Прямо сейчас я использую этот фрагмент кода:
function highlightWords(line, word, htmltag) {
var tag = htmltag || ["<b>", "</b>"];
var regex = new RegExp('(' + preg_quote(word) + ')', 'gi');
return line.replace(regex, tag[0] + "$1" + tag[1]);
}
function preg_quote(str) {
return (str + '').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1");
}
Однако, это не в состоянии выделить другие слова, если запрос похож на sit behind
.Это только выделит полную фразу, а не отдельные слова.Он также не заботится о тегах HTML, и это приводит к непредсказуемым результатам, если запрос span
, например ...
Я обнаружил различные библиотеки, которые лучше справляются с подсветкой, например https://markjs.io/ или https://www.the -art-of-web.com / javascript / search-highlight /
Эти библиотеки, тем не менее, всегда хотят выделить контент, который уже присутствует в DOM.
Мой поиск получает ответ ajax, который я затем превращаю в HTML с JS и вставляю полную HTMLString в родительский контейнер, используя DOM7 (что аналогично jQuery).Поэтому я бы предпочел выделить текст перед созданием HTMLString и вставкой его в DOM.
Есть идеи?