#javascript #highlight #find-occurrences
#javascript #выделить #найти-вхождения
Вопрос:
Я хочу выделить в тексте все вхождения из слова, которое у меня есть в моем URL. Для первого вхождения все работает нормально. Но я не знаю, как перейти к следующему.
highlightText: function(urlParams) {
var urlSearch = window.location.search;
var urlParams = new URLSearchParams(urlSearch);
var searchText = urlParams.get('search');
if (window.find(searchText)) {
var el = document.getElementById('collection-content');
text = el.innerHTML;
marked = text.replace(searchText, "<mark>" searchText "</mark>");
el.innerHTML = marked;
}
}
Я пытался добавить a while(window.find(searchText)
перед if, но это не работает, кажется, что цикл выполняется только при первом появлении моего слова.
Заранее спасибо
Комментарии:
1. Обязательное предупреждение:
window.find
является нестандартным , используйте на свой страх и риск. Кроме того, это неправильный инструмент для этого, поскольку он возвращает логическое значение.2. Можете ли вы предоставить codesandbox.io это повторяет его?
3. Почему вы хотите это сделать?
4. @Jared: звучит разумно, но, похоже, это изобретает колесо «ctrl F». Это не обязательно плохо и может быть хорошим опытом обучения, но это кажется немного излишним, особенно когда — как вы уже упоминали — используется неправильный инструмент.
5. Это звучит как проблема XY . Если вы являетесь владельцем веб-страницы, почему бы просто не изменить разметку перед ее отображением?
Ответ №1:
Если вы не используете регулярное выражение, то оно заменит только первое вхождение, вы можете попробовать это, также измените регулярное выражение в соответствии с вашими потребностями.
highlightText: function(urlParams) {
var urlSearch = window.location.search;
var urlParams = new URLSearchParams(urlSearch);
var searchText = urlParams.get('search');
if (window.find(searchText)) {
var el = document.getElementById('collection-content');
text = el.innerHTML;
marked = text.replace(
RegExp(`(${searchText})`),
"<mark>" searchText " </mark>");
el.innerHTML = marked;
}
}
Примечание: совпадение чувствительно к регистру