使用jquery仅替换div内的文本

IT技术 javascript jquery
2021-01-31 15:09:47

我有一个像:

<div id="one">
       <div class="first"></div>
       "Hi I am text"
       <div class="second"></div>
       <div class="third"></div>
</div>

我正在尝试使用 jquery 仅将文本从“您好,我是文本”更改为“您好,我正在替换”。这可能很容易,但我无法做到。

使用$('#one').text('')只是清空整个#Onediv。

6个回答

文本不应单独存在。将其放入一个span元素中。

改成这样:

<div id="one">
       <div class="first"></div>
       <span>"Hi I am text"</span>
       <div class="second"></div>
       <div class="third"></div>
</div>
$('#one span').text('Hi I am replace');
这并没有回答 OP 的问题,他们没有说他们可以控制 HTML。
2021-04-04 15:09:47
这是有效的,但如何确定是否执行?如果空白或标签更改,我可以运行异常吗?在不成功的绑定中,因为这个 div 是由 code.from REST 或数据库创建的
2021-04-11 15:09:47

找到文本节点 ( nodeType==3) 并替换textContent

$('#one').contents().filter(function() {
    return this.nodeType == 3
}).each(function(){
    this.textContent = this.textContent.replace('Hi I am text','Hi I am replace');
});

请注意,按照该文档可以取代硬编码3在上面用Node.TEXT_NODE其更清晰自己在做什么。

@Jamiec FWIW 我喜欢这个答案,因为它允许替换而不必担心破坏标记/脚本等。
2021-03-15 15:09:47
这对我来说非常有效。有时我们在不允许更改 HTML(即 SharePoint)的情况下工作。谢谢
2021-03-21 15:09:47
这应该是公认的答案,因为这不需要您更改 html!
2021-03-24 15:09:47
@Paul 谢谢,它更清楚,所以我将它作为注释包含在这个旧答案中。
2021-03-25 15:09:47
为什么不能取代3Node.TEXT_NODE使片断更清晰?
2021-03-27 15:09:47

您需要将文本设置为空字符串以外的内容。此外,.html() 函数应该在保留 div 的 HTML 结构的同时执行此操作。

$('#one').html($('#one').html().replace('text','replace'));
虽然这在这种情况下可行,但我不喜欢这个选项,因为如果你用“第二”这个词替换“第一”这个词,或者只是用“”替换“我”,它会弄乱你的标签
2021-04-14 15:09:47

如果您确实知道要替换的文本,则可以使用

$('#one').contents(':contains("Hi I am text")')[0].nodeValue = '"Hi I am replace"';

http://jsfiddle.net/5rWwh/

或者

$('#one').contents(':not(*)')[1].nodeValue = '"Hi I am replace"';

$('#one').contents(':not(*)') 在这种情况下选择非元素子节点文本节点,第二个节点是我们要替换的节点。

http://jsfiddle.net/5rWwh/1/

FromjQuery 1.8.3 $('#one').contents(':not(*)')将不选择任何内容。
2021-04-13 15:09:47

以防万一,如果您无法更改 HTML。非常原始但简短且有效。(它将清空父 div,因此将删除子 div)

$('#one').text('Hi I am replace');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="one">
  <div class="first"></div>
  "Hi I am text"
  <div class="second"></div>
  <div class="third"></div>
</div>

这将删除 #one 的所有子 div
2021-03-28 15:09:47
@ScotNery 谢谢,我已经更新了答案。(虽然它在技术上回答了这个特定问题)我假设除了用具有 id 的标签包装文本之外,这将是非常具有挑战性的。唯一的其他事情就是匹配一个字符串来替换,但它真的很脆弱。
2021-03-28 15:09:47