使用jquery仅替换div中的文本

man*_*ams 97 javascript jquery

我有一个div喜欢:

<div id="one">
       <div class="first"></div>
       "Hi I am text"
       <div class="second"></div>
       <div class="third"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用jquery仅将"我是文本"中的文本更改为"我是替换".这可能很容易,但我无法做到.

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

Bri*_*tas 130

文字本身不应该是单独的.把它放入一个span元素中.

把它改成这个:

<div id="one">
       <div class="first"></div>
       <span>"Hi I am text"</span>
       <div class="second"></div>
       <div class="third"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
$('#one span').text('Hi I am replace');
Run Code Online (Sandbox Code Playgroud)

  • 这并没有回答OP的问题,他没有说他们可以控制HTML. (42认同)

Jam*_*iec 114

找到文本nodes(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');
});
Run Code Online (Sandbox Code Playgroud)

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

  • 真的很棒的答案! (6认同)
  • 这应该是接受的答案,因为这不需要你改变HTML! (5认同)
  • @Jamiec FWIW我喜欢这个答案,因为它允许替换而不用担心标记/脚本等的加密. (2认同)
  • 这对我很有用.有时我们在不允许更改HTML(即SharePoint)的情况下工作.谢谢 (2认同)

gco*_*ard 12

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

$('#one').html($('#one').html().replace('text','replace'));
Run Code Online (Sandbox Code Playgroud)


Mus*_*usa 8

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

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

http://jsfiddle.net/5rWwh/

要么

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

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

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

  • 从`jQuery 1.8.3``$('#one').contents(':not(*)')` 将不选择任何内容。 (2认同)