使用jQuery仅替换div内的文本


104

我有一个像这样的div:

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

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

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



使用$('#one')。find('。first')。text('嗨,我要替换'); 而不是$('#one')。text(); 或者您可以直接访问该元素并使用$('。first')。text('嗨,我是替换');替换文本。
Kartik Chauhan

Answers:


134

文字不应该是独立的。将其放入一个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');

51
这没有回答OP的问题,OP并未说他们拥有对HTML的控制权。
焦油

1
这是可行的,但是如何确定是否执行?如果空白或标签更改,我可以运行异常吗?在不成功的绑定中,因为此div是由code.from REST或数据库创建的
saber tabatabaee yazdi

122

找到文本节点(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');
});

实时示例:http//jsfiddle.net/VgFwS/


6
真是个好答案!
wcolbert

6
这应该是可接受的答案,因为这不需要您更改html!
Wouter Rutgers

2
@Jamiec FWIW我喜欢这个答案,因为它允许更换,无需担心borking标记/脚本等
sehe

3
这对我来说非常合适。有时我们会在不允许更改HTML的情况下工作(即SharePoint)。谢谢
Mark P.

14

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

$('#one').html($('#one').html().replace('text','replace'));

尽管这在这种情况下可行,但我不喜欢此选项,因为如果您将单词“ first”替换为单词“ second”,或者将“ i”替换为“”,则会使您的标签混乱
JSON,2009年

10

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

$('#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/


2
jQuery 1.8.3 $('#one').contents(':not(*)')将不选择任何内容。
BruceHill 2014年

0

另一种方法是保留该元素,更改文本,然后将其追加回

const star_icon = $(li).find('.stars svg')
$(li).find('.stars').text(repo.stargazers_count).append(star_icon)

0

以防万一您无法更改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>


1
这会删除#one的所有子div
Scot

1
@ScotNery谢谢,我已经更新了答案。(尽管从技术上讲,它回答了这个特定问题)我假设除了用带有id的标签包裹文本之外,这还是很有挑战性的。唯一的其他事情就是匹配要替换的字符串,但这确实很脆弱。
ReturnTable '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.