2010-12-15 209 views
5

我試圖找到解決方案來搜索DOM中包含的文本字符串「Tony」,並用文本字符串「Tiger」替換它。如何查找文本並使用jQuery替換

任何人都有任何見解或想法如何做到這一點?我猜它會採取每個語句加上一個替換函數,並可能包含?

感謝 傑克

+2

請詳細說明。你對DOM中的_where_有任何想法嗎?你是否想用'老虎'來替換'Tony'的出現?無論它出現在哪裏? – 2010-12-15 22:29:15

+0

你是否爲那個html容器?或者直接取代所有 – kobe 2010-12-15 22:31:30

+0

是的,我想用「Tiger」替換「Tony」的每一個出現位置 - 它所在的DOM所在的位置 - 可能必須在.container元素中。 – jrutter 2010-12-15 22:35:06

回答

18

你可以使用這個搜索body元素的所有兒童和替換文本...

$('body').children().each(function(){$(this).text($(this).text().replace('Tony','Tiger'))}); 

它使用jQuery的。它也應該只改變元素和沒有HTML格式的文本內容...

您也可以使用這種方法,它使用一個RegExp,並會得到所有嵌套的元素:

$('body').html($('body').html().replace(/Tony/gi,'tiger')); 
+0

這不起作用,因爲'children()'不會遞歸搜索DOM - 它只會給你直接的孩子。 – 2010-12-15 23:14:43

+0

它不工作在我的網頁上:http://www.laithwaiteswine.com $('。container')。children()。each(function(){$(this).text($(this).text() .replace('Laithwaites','Tiger'))}); - 這是刪除所有的DOM或打破它。 – jrutter 2010-12-16 00:04:08

+1

@jrutter:不知道爲什麼沒有看到你的代碼發生在你身上。然而,我用另一個使用RegExp方法解決了我的解決方案---> $('body')。html($('body')。html()。replace(/ Tony/gi,'tiger') ); – exoboy 2010-12-16 00:18:11

5

頁寬,你可以使用這樣的事情:

var $body = $('body'); 
var html = $body.html(); 
var newHtml = html.replace('Tony', 'Tiger'); 
$body.html(newHtml); 

或者,如果你有一個更具體的容器,使用jQuery選擇子容器和做同樣的事情。

無論哪種方式,這是一種霰彈槍的方法。它將更改可見文本和html元素屬性中的字符串。如果字符串需要在某些位置被忽略,則可能需要更詳細的方法。

+0

這不是工作,整個頁面重新加載。 – jrutter 2010-12-16 00:01:16

3

是否有可能將其與服務器端解決方案相結合?你可以用一個特殊的類來包裝服務器端的每一個字,例如<span class="replaceme">texttoreplace</span>

僅在生成的類上運行javascript替換纔會加快速度。

+1

+1肯定比搜索DOM文本好多了。 – 2010-12-15 23:18:51

+1

如果這是一種可能性,爲什麼他不替換服務器端的字符串呢?添加不必要的dom元素似乎過多 – ximi 2012-05-31 05:54:20