查找并替换所有同名的文本

3

我正在尝试进行搜索和替换文本的操作,但是只有部分文字被替换了。在正文中存在相同名称的文本,但是一些旧文本仍然显示出来,不太清楚出了什么问题。

$(document).ready(function() {
    $('*').each(function(){
        if($(this).children().length == 0) 
            $(this).text($(this).text().replace("old text", "replace with new text"));
        });
});

非常感谢您的帮助

谢谢


“that has the same name” -- 同名于什么? - zerkms
在页面上用相同的文本。 - Kevin
1个回答

5
使用:contains伪类选择器查找包含该文本的任何元素,然后从那里进行替换。
$(":contains('old text')").each(function(){
    $(this).text($(this).text().replace('old text', 'new text'));
});

如果你知道一组想要定位的元素,另一种解决方案是先找到这些元素,然后使用 :contains 对它们进行过滤。
$('div, p, a, span').filter(":contains('old text')").each(function(){
    $(this).text($(this).text().replace('old text', 'new text'));
});

@Roko - 谢谢,但是这些例子在性能方面非常不同。后者的例子可以利用本地DOM querySelectorAll()方法,然后能够在给定字符串的较小子集中搜索。这样会更快,但并不总是实用的。 - jaredhoyt
@jaredhoyt 感谢您的帮助,Jared。这个已经可以工作了,但它是区分大小写的,有没有办法使其不区分大小写呢?我已经添加了 jquery 表达式":contains",但仍然没有效果。 - Kevin
@Kevin 要使 :contains 不区分大小写,您需要扩展核心选择器。您应该能够在网上找到一些示例(例如这里这里)。 - jaredhoyt
@jaredhoyt 嗯,还是没有任何变化,还是区分大小写,我认为.replace使它区分大小写,我尝试了你发布的两个示例。 - Kevin

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