Задать вопрос
@inkyrein
Начинаю постигать WEB-программирование

Как заменить все вхождения в строке (JQuery)?

Привет всем. Подскажите, как заменить в строке все вхождения. Ибо когда моя функция натыкается на определенное сходство она его заменяет, а последующие нет.
$("#subscription_box").text(function(index, text) {

        var array = [];
        array[0] = [':days_of_trial', $('.check_subscription_item:checked').data('daysoftrial')];
        array[1] = [':term_days', $('.check_subscription_item:checked').data('termdays')];
        array[2] = [':total_days', $('.check_subscription_item:checked').data('daysoftrial') + $('.check_subscription_item:checked').data('termdays')];

        $.each(array, function (i, arr) {
          text = text.replace(arr[0], arr[1]);
        })

        return text;
      });


Выход такой
This subscription comes with a 30 day Trial. If you cancel before the expiration of your trial period your subscription will be refunded. The expiration date of your subscription will be 30 days plus the :days_of_trial day trial period, for a total of 60 days
. Второй :days_of_trial незаменяется.

И вообще правильный ли я подход выбрал?
  • Вопрос задан
  • 645 просмотров
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
FFxSquall
@FFxSquall
Могу писать код, могу не писать
попробуйте так =)
text = text.split(arr[0]).join(arr[1]);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
abyrkov
@abyrkov
JavaScripter
Начнем с того, что принято такие вещи (в основном) реплайсить на севере.
Во вторых, мне кажется, логичнее пользоваться таким вариантом:
function replace(all, name){
  switch(name){
    case 'days_of_trial':
      return days;
   ...
   default: 
     return name;
  }
}
text.replace(/\:((?:\w)*)/, replace);

Учтите, не тестил, но суть, думаю, ясна
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы