Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

String.replace для всего дива а не для конкретного текста

Влад Профи (563), открыт 1 неделю назад
 const string = "текст по которому идет поиск";   
const result = string.replace(/\|\b([^|]+)\b\|/g, '<span class="colored">$1</span>');
const container = document.querySelector("#111");
container.innerHTML = result;


Есть такой вот код он работает, но ищет и заменяет только в указанном в строке const string = тексте. Мне же надо искать и заменять внутри всего div. Ищу решение!

И второй вопрос - в приведённом коде заменяется цвет текста внутри | |
Как заменить на «внутри таких вот кавычек» желательно включая сами кавычки?
1 ответ
Андрей Панарин Искусственный Интеллект (271858) 1 неделю назад
Чтобы искать внутри всего div, возьмите внутренний HTML всего этого div и в нем ищите.
Если у вас <div id="111"> и тут искомый текст </div>, тогда так:
 const container = document.querySelector("#111");
const string = container.innerHTML;
const result = string.replace(/\|\b([^|]+)\b\|/g, '<span class="colored">$1</span>');
container.innerHTML = result;
Для кавычек-ёлочек меняем регулярное выражение.
 const result = string.replace(/«\b([^»]+)\b\»/g, '<span class="colored">$1</span>'); 
Но вообще с \b это работает только в том случае, когда строка между || начинается и заканчивается буквой.

Вот тут можете потренироваться:
https://regex101.com
ВладПрофи (563) 1 неделю назад
Спасибо! Все работает но возникла непонятная мне проблема. JS срабатывает только 1 раз. Если у меня идёт несколько одинаковых блоков текста (комментарии) то он срабатывает только на первом. При добавлении второго комментария не срабатывает вообще.
Андрей Панарин Искусственный Интеллект (271858) Ну это, наверное, из-за того, что document.querySelector находит только первое совпадение. Если вместо поиска по id (#айди) сделаете поиск по классу (.имякласса), то сможете выбрать все дивы одного класса, вызвав document.querySelectorAll. Результат будет коллекцией, которую можно будет перебрать циклом for по индексу.
ВладПрофи (563) 1 неделю назад
Я уже заменил id на класс. Но увы. В чем может быть ещё проблема?
Андрей Панарин Искусственный Интеллект (271858) querySelectorAll и цикл сделали?
Похожие вопросы