使用jQuery查找和替换文本,不需要元素ID

12

我在尝试查找和替换文本。

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

我正在尝试这样做:

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

效果不太好。
有人遇到过这种情况吗?

另外,如果我有几个单词或短语需要查找和替换,那么这会对用户浏览器的速度/处理能力产生什么影响?它是一个内存占用大的东西吗?

5个回答

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

6

Takpar,你的代码也起作用了。但是它似乎会停止一些其他功能的运行,但只有我正在动态获取项目时。例如,当我使用.ajax()时。不确定为什么,但这就是我遇到的问题。我会进行更多测试。

在相关主题上,Gumbo的代码有效:

$("*").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....

我只想找到并替换“Price:”这个词,可能用“Cost:”代替。

但是正如我所提到的,那些数据还没有被加载。

这是我必须接受的限制吗?


这在现代浏览器中运行良好。我通过JS Lint检查后发现你缺少一个等号,所以我添加了它。如何使其兼容IE8-IE7?@coffeemonitor @jellybelly - breezy

4
为什么不直接使用以下代码:
$('body').html($('body').html().replace('Original Text','New Text'));

1

1
":contains" 不是一个好主意:“匹配的文本可以直接出现在所选元素内,也可以出现在该元素的任何后代中,或者两者结合。” - Gumbo
只有在您不想在后代中替换它时才为真。 - user241244
意思是,replace方法将进行替换,而不是选择器。 - user241244

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接