Замена всех вхождений

289
12 февраля 2020, 00:40

Нужно заменить все вхождения [br] в заголовках h1 на тег </br>. Пишу следующий код:

jQuery('h1').each(function() {
    var text = jQuery(this).text();
    text.replace(/\[br]/g, '</br>');
    jQuery(this).text(text);
});

https://jsfiddle.net/cjq263ex/

Работать не хочет, хотя регулярное выражение, вроде, правильное.

Answer 1

В вашем коде есть ряд проблем:

  1. Вы используете неправильное регулярное выражение. (На самом деле, вы забыли экранировать символ ].) Правильное регулярное выражение имеет вид:

    /\[br\]/g
    
  2. Вы не правильно осуществляете замену. Метод String.prototype.replace возвращает обновленную строку, а не проводит замены в текущей.

  3. Метод jQuery.text экранирует все теги из переданной строки, заменяя управляющие символы HTML-сущностями. Вам нужно использовать метод jQuery.html

  4. Тег br имеет вид <br /> а не </br> (обратите внимание на положение слеша). Ваш вариант не соответствует стандартам, хотя и должен работать в браузерах.

Таким образом, правильный код имеет вид:

jQuery('h1').each(function() {
    var text = jQuery(this).text();
    text = text.replace(/\[br\]/g, '<br />');
    jQuery(this).html(text);
});

JSFiddle с работающим примером.

Answer 2

replace возвращает новую строку, не меняя текущую.

Этот метод не изменяет объект String, на котором он вызывается. Он просто возвращает новую строку.

нужно

jQuery(this).text(text.replace(/\[br\]/g, '</br>'));

как заметил @walik, если нужно вставить html вместо функции text нужно использовать html

jQuery(this).html(text.replace(/\[br\]/g, '</br>'))
READ ALSO
Поиск по условию

Поиск по условию

Имеется массив объектов ценУ каждого объекта цены есть её значение и условие применения, которое зависит от количество заказанных продуктов...

275
Вебсокеты и bitfinex

Вебсокеты и bitfinex

Хочу использовать вебсокеты для получения курса валют с биржи битфинексНо в браузере получаю ошибку

265