2010-12-15 223 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