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