更改textNode值


91

有什么方法可以在Web浏览器中更改DOM textNode的值吗?

我特别想看看是否可以更改现有节点,而不是创建一个新节点。

为了澄清,我需要使用Javascript来做到这一点。浏览器中的所有文本都存储在#textNodes中,它们是其他HTML节点的子节点,但不能拥有自己的子节点。

如下所述,可以通过设置这些对象的nodeValue属性来更改内容。


HTML示例以及您要更改的内容?您要使用javascript吗?
shahkalpesh

在研究同一问题时,我发现Mozilla开发人员网络提出了有关innerHTML使用的安全通知,并赞成textContent使用。使用textContent对我来说很好。
约尔(Joël)

Answers:


130

如果您有一个特定的节点(类型为#text),并且想要更改其值,则可以使用nodeValue属性:

node.nodeValue="new value";

注意:

innerText(和 可能 textContent)将同时返回/设置当前节点和所有后代节点的文本,因此可能不是您想要/期望的行为。


1
是的,nodeValue非常适合此操作。innerText和textContent在这方面有所不同:IE(创建了innerText)在#text节点上不支持它(因为没有要进行文本化的子节点),而textContent应该在#Element和#text节点上同时使用。

4
还有“数据”作为Text(以及CDATASection和Comment)上的“ nodeValue”的缩写。
bobince

nodeValue是我需要的那个。由于某种原因,我认为它是只读的,但似乎可以在FF3和IE7上使用。谢谢!
levik

8
@petermeissner:这可以完美地回答问题,因此您完全不赞成您的否决票。
蒂姆·唐

1
并非始终有效。.“将nodeValue定义为null时,将其设置无效。” ..在这种情况下,我选择了“ textContent” ...设置它也更新了“ innerText”的值
愚蠢的

-10

我相信将innerHTML用于此操作...再说一次,那是未经W3C批准的...但是它可以正常工作...

node.innerHTML="new value";

1
+1为有效的解决方案。nodeValue不允许我替换元素的内容
petermeissner 2014年

3
永远不要使用innerHTML它,因为它在阅读书写时都将代码视为文本。
约翰

7
@petermeissner:这没有回答问题。您必须nodeValue在文本节点上设置,而不是其父元素。
蒂姆·唐
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.