jQuery 如果 div 包含这个文本,则替换文本部分

90

就像标题所说,我想要替换 div 中特定部分的文本。

结构看起来像这样:

<div class="text_div">
    This div contains some text.
</div>

我想仅将“包含”替换为“大家好”,例如。 我找不到解决方法。


如果文本是“此div包含一些包含某些字母的文本”,我想更改第一个包含而不是第二个包含,怎么办?或者只需选择任何单词,它将被预定义的单词替换。 - stockBoi
5个回答

163
您可以使用text方法,并传递一个返回修改后文本的函数,使用原生String.prototype.replace方法执行替换操作:
​$(".text_div").text(function () {
    return $(this).text().replace("contains", "hello everyone"); 
});​​​​​

这里有一个可运行的示例


2
你可以使用正则表达式/iwantreplacethis/g来替换所有的出现 - Aiphee
1
非常感谢您的帮助 :) 一个简单的问题:为什么没有 return 就不能正常工作呢? - Aaron Matthews
2
@AaronMatthews 这个回答是很久以前的,但我认为原因可能是jQuery的text方法在传递一个函数时,会将选择的文本设置为该函数的返回值。如果没有return,则文本将被替换为空。 - James Allardice
这为我解决了一个复杂的问题,谢谢。 - Moxet Jan

12
如果可能的话,您可以将要替换的单词用 span 标签包裹起来,像这样:
<div class="text_div">
    This div <span>contains</span> some text.
</div>
你可以使用 jQuery 轻松地更改它的内容:
$('.text_div > span').text('hello everyone');

如果你不能将其包装在span标签中,则可以使用正则表达式。


10

非常简单,只需使用此代码即可保留HTML,同时仅删除未包装的文本:

jQuery(function($){

    // Replace 'td' with your html tag
    $("td").html(function() { 

    // Replace 'ok' with string you want to change, you can delete 'hello everyone' to remove the text
          return $(this).html().replace("ok", "hello everyone");  

    });
});

这是完整的示例:https://blog.hfarazm.com/remove-unwrapped-text-jquery/


8
var d = $('.text_div');
d.text(d.text().trim().replace(/contains/i, "hello everyone"));

4
你可以使用包含选择器来搜索包含特定文本的元素。
var elem = $('div.text_div:contains("This div contains some text")')​;
elem.text(elem.text().replace("contains", "Hello everyone"));

​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​


如果我的字符串包含多个目标词,那么这将替换多个单词吗? - Tamaghna Banerjee

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