2010-02-27 63 views
12

我玩弄发现和替换文本。jquery查找和替换文本,没有元素ID

我遇到的唯一问题是找到一个文本字符串,它没有附加到具有ID的元素。否则,这很容易。

我想是这样的:

$("*").each(function() { 
    $(this).html(this.html().replace('Original Text','New Text')); 
}); 

不工作太清楚了。
任何人都遇到过这个?

此外,如果我有几个单词或短语来查找和替换,这会如何影响用户浏览器的速度/处理能力?它是一个记忆猪吗?

回答

6

Takpar,你的代码工作过。它似乎阻止了其他一些工作,但只有我动态拉动的物品。例如,当我使用.ajax()时。不知道为什么,但这就是我碰到的原因。我会测试更多。

与此相关的话题,浓汤的代码工作:

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

我运行到与被替换的是在页面加载后加载的文本问题的唯一的事情。

我确实有一些JavaScript函数显示来自服务器的数据,但只有在页面加载完所有元素之后。例如,用户从启动事件的下拉列表中选择一个值,以从数据库加载产品列表。

我格式化其中的一些同类产品的:

Granny Smith Apples 
Price: x.xx per pound 
Nutritional facts.... 

我只希望找到一个替代词“价格”,并可能将其替换为“成本”。

但正如我所提到的,该数据尚未加载。

是我必须忍受的限制吗?

+0

这在现代浏览器中运行良好,我通过JS Lint传递了它,并且它说你缺少一个'='等号,所以我添加了它。我怎样才能使这与IE8 -IE7兼容? @coffeemonitor @jellybelly – breezy 2012-11-02 20:30:37

1

您需要:contains()选择器。 http://api.jquery.com/contains-selector/

$("*:contains('Original Text')").each(...); 
+0

当然,具体你可以是最好的。 – 2010-02-27 22:34:41

+1

':contains'不是一个好主意:“匹配的文本可以直接出现在所选元素中,*表示该元素的任何后代或其组合*。” – Gumbo 2010-02-27 22:36:31

+0

仅当您不想取代它时在后代。 – 2010-02-27 22:51:33

20
$("*").contents().each(function() { 
    if(this.nodeType == 3) 
     this.nodeValue = this.nodeValue.replace("old", "new"); 
}); 
+1

+1这是我的下一个想法。 ;-) – Gumbo 2010-02-27 22:43:33

4

你为什么不干脆用:

$('body').html($('body').html().replace('Original Text','New Text')); 
0
$("*").each(function() { 
if ($(this).children().length == 0){ 
    $(this).html($(this).html().replace(/Old String/g, "New String")); 
}});