JQuery - поиск и замена текста после загрузки тела

Я получил некоторую удивительную помощь от других, касающуюся поиска и замены текста с помощью jquery.

В приведенном ниже коде найдется слово "Subject:" и замените его "Name:"

$("*").each(function () { 
   if ($(this).children().length == 0) { 
      $(this).text($(this).text().replace('Subject:','Name:')); 
   } 
});

И это прекрасно работает.

Единственное, с чем я столкнулся, это замена текста, загружаемого после загрузки страницы.

У меня есть некоторые функции javascript, которые отображают данные с сервера, но только после того, как страница загрузила все элементы. Например, пользователь выбирает значение из раскрывающегося списка, которое инициирует событие для загрузки списка продуктов из базы данных.

Я отформатирую некоторые из таких продуктов, как это:

Бабушка Смит Яблоки Цена: x.xx за фунт Пищевые факты....

Я хочу только заменить слово "Цена" и, возможно, заменить его "Стоимость:".

Но, как я уже упоминал, эти данные еще не загружены. И отображается только после того, как пользователь выберет "Granny Smith Apples" из выпадающего меню.

Являюсь ли это пределом, с которым я должен жить?

Ответы

Ответ 1

Вы можете попробовать добавить событие в ajaxStop событие, а также при загрузке:

function replaceText() {
    var jthis = $(this);
    $("*").each(function() { 
        if(jthis.children().length==0) { 
            jthis.text(jthis.text().replace('Subject:', 'Name:')); 
        } 
    });
}
$(document).ready(replaceText);
$("html").ajaxStop(replaceText);

Ответ 2

Вызовите свою функцию из обратного вызова $(document).ready(), подобного этому

$(document).ready(function() { replace_stuff(); } );

Ответ 3

Функция ниже отлично работает для меня:

function replaceText(selector, text, newText, flags) {
  var matcher = new RegExp(text, flags);
  $(selector).each(function () {
    var $this = $(this);
    if (!$this.children().length)
       $this.text($this.text().replace(matcher, newText));
  });
}

Вот пример использования:

function replaceAllText() {
  replaceText('*', 'Subject:', 'Name:', 'igm');
}

$(document).ready(replaceAllText);
$('html').ajaxStop(replaceAllText);