2010-02-27 61 views
15

我從其他人那裏獲得了一些驚人的幫助,涉及使用jquery查找和替換文本。下面jQuery - 查找並替換正文後的文本

的代碼將查找單詞:「主題:」並將其替換爲「姓名:」

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

而這種奇妙的作品。

我遇到的唯一問題是替換加載頁面後加載的文本。

我確實有一些JavaScript函數顯示來自服務器的數據,但只有在頁面加載完所有元素之後。例如,用戶從啓動事件的下拉列表中選擇一個值,以從數據庫加載產品列表。

我格式化其中的一些同類產品的:

青蘋果 價格:每磅 營養成分X.XX ....

我只希望找到一個替代詞「價格:「,並可能將其替換爲」成本:「。

但正如我所提到的,該數據尚未加載。並且僅在用戶從下拉菜單中選擇「格蘭尼史密斯蘋果」後才顯示。

這是我必須忍受的限制嗎?

回答

13

你可以嘗試在負載連接將事件ajaxStop event還有:

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

這是有效的!好主意,但非常簡單。 謝謝! – coffeemonitor 2010-02-28 00:06:59

+2

爲什麼要創建如此多的jq對象....緩存$(this)refs – redsquare 2010-04-23 08:05:27

+0

我在哪裏添加此片段? functions.php,我的主題文件?對於noobie問題抱歉。 – Pete 2016-12-19 02:37:44

1

$(document).ready()回調調用你的函數類似這樣的

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

我已經這樣做了,並且仍然不會影響頁面加載後加載的數據。 – coffeemonitor 2010-02-28 00:02:45

0

下面的功能完美的作品對我來說:

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