什么是文本节点,它的用途? //document.createTextNode()

所以我一直在慢慢地用原生javascript取代很多正常的jQuery代码,而且我碰到了document.createTextNode()和相关的MDN文档 。 阅读后我有点困惑什么是文本节点。

我知道它可以用来把文本放在div的内部,但我相信还有更多的东西不仅仅是“用它把单词放在元素里面”。 看着这个,看起来文本节点也可以引用属性的文本。

任何人都可以提供更多的定义什么是文本节点,以及它用于什么? 除了像这样的基本东西以外,还有其他的实际用途吗?

 var div = document.createElement('div'); var text = document.createTextNode('Y HALO THAR'); div.appendChild(text); 

页面中的所有可见HTML文本(除了表单元素或自定义embedded对象中的文本)都在文本节点中。 该页面包含许多不同types的节点(您可以在这里查看不同节点types的列表: https : //developer.mozilla.org/en-US/docs/Web/API/Node.nodeType ),一些其中可以有子节点,其中一些不能。 例如,div是一个可以包含子节点的ELEMENT节点。 那些子节点可以是其他ELEMENT节点,或者它们可以是TEXT节点或COMMENT节点或其他types的节点。

当您设置元素节点的.innerHTML属性时,它会创build适当的节点,并使其成为您设置innerHTML属性的元素的子节点。 如果您设置的innerHTML有文本,则会创build文本节点来保存它。

DOCUMENT_NODEELEMENT_NODETEXT_NODE是最常见的节点types,每个页面都有文本。

在你的代码示例中:

 var div = document.createElement('div'); var text = document.createTextNode('Y HALO THAR'); div.appendChild(text); 

这将创build一个文本节点,并将其放入您创build的div。 它生成与此相同的DOM结构:

 var div = document.createElement('div'); div.innerHTML = 'Y HALO THAR'; 

在后一种情况下,系统会为您创build文本节点。


在普通的javascript编程中(jQuery倾向于屏蔽非ELEMENT_NODEtypes的节点的开发人员),任何时候走一个包含文本的元素的子节点都会遇到文本节点。 您将需要检查每个孩子的.nodeType ,以了解它是否是另一个元素或文本节点或其他types的节点。


通常,直接操作文本节点的原因并不多,因为您可以更简单地使用更高级别的.innerHTML属性。 但是,给你一个想法,这里有几个原因你可能想直接处理文本节点:

  1. 你想改变一些文本,而不影响它周围的任何元素。 .innerHTML为受影响的元素创build了所有新的元素,这些元素会杀死可能已经设置的事件处理程序,但在文本节点上设置.nodeValue不会导致重新创build任何元素。

  2. 如果您只想在文档中find文本而没有任何生成的HTML标记,并且确切知道每段文本在DOM中的位置,则可以search所有文本节点。 例如,如果您正在对文档进行文本search,然后突出显示find的文本,则可能会直接search文本节点。

  3. 你想显示一些没有任何安全风险的文本,它可能包含浏览器将parsing和解释的其他标记,如果你使用.innerHTML 。 所以,你创build一个文本节点并设置其文本的值,浏览器不会插入任何HTML。 现代浏览器也可以使用元素的.textContent属性来代替.innerHTML来解决这个问题。