jQuery - найти и заменить текст после загрузки тела - PullRequest
15 голосов
/ 28 февраля 2010

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

Приведенный ниже код найдет слово «Subject:» и заменит его на «Name:»

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

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

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

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

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

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

Я только хочу найти слово «Цена:» и заменить его на «Стоимость:».

Но, как я уже говорил, эти данные еще не загружены. И отображается только после того, как пользователь выберет «Яблоки Гренни Смит» из выпадающего меню.

Это предел, с которым я должен жить?

Ответы [ 3 ]

13 голосов
/ 28 февраля 2010

Вы можете попробовать присоединить событие к событию 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);
1 голос
/ 28 февраля 2010

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

$(document).ready(function() { replace_stuff(); } );
0 голосов
/ 06 сентября 2014

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

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);
...