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

IT技术 javascript html textnode
2021-02-17 06:31:55

所以我一直在慢慢地用原生 javascript 替换我的很多普通的 jQuery 代码,我偶然发现了document.createTextNode()相关的 MDN 文档阅读后我有点困惑文本节点是什么。

我知道它可用于将文本放入div's 中,但我确信它不仅仅是“使用它在元素中放入单词”。 看这个,似乎文本节点也可以引用属性的文本。

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

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

页面中所有可查看的 HTML 文本(表单元素或自定义嵌入对象中的文本除外)都位于文本节点中。该页面由许多不同类型的节点组成(您可以在此处查看不同节点类型的列表:https : //developer.mozilla.org/en-US/docs/Web/API/Node.nodeType),一些其中可以有子节点,有些不能。例如,一个 div 是一个 ELEMENT 节点,它可以包含子节点。这些子节点可以是其他 ELEMENT 节点,也可以是 TEXT 节点或 COMMENT 节点或其他类型的节点。

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

DOCUMENT_NODE,ELEMENT_NODETEXT_NODE是最常见的节点类型,存在于每个包含文本的页面中。

在您的代码示例中:

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

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

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

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


在普通的 javascript 编程中(jQuery 倾向于将开发人员与非 type 的节点屏蔽开来ELEMENT_NODE),每当您遍历包含文本的元素的子节点时,您都​​会遇到文本节点。您需要检查.nodeType每个子节点的 ,以了解它是另一个元素还是文本节点或其他类型的节点。


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

  1. 您希望更改某些文本而不影响其周围的任何元素。 .innerHTML为受影响的元素创建所有新元素,这会杀死可能已在其上设置的任何事件处理程序,但.nodeValue在文本节点上设置 不会导致任何元素重新创建。

  2. 如果您只想查找文档中的文本而不需要任何生成的 HTML 标记,并确切知道每段文本在 DOM 层次结构中的位置,您只需搜索所有文本节点即可。例如,如果您对文档进行文本搜索,然后突出显示找到的文本,您可能会直接搜索文本节点。

  3. 您希望在没有任何安全风险的情况下显示一些文本,因为它可能包含其他标记,如果您使用.innerHTML. 因此,您创建一个文本节点并设置其文本的值,浏览器将不会在其中插入任何 HTML。现代浏览器也可以使用.textContent元素属性.innerHTML来解决这个问题。

在现代浏览器上值得一提的是textContent,“建议您在插入纯文本时不要使用 innerHTML;而是使用 element.textContent。这不会将传递的内容解释为 HTML,而是将其作为原始文本插入。”
2021-05-02 06:31:55
“页面中的所有可见文本都在文本节点中”不,也可能来自图像的“值”属性<submit><input type='submit' alt=文本。 title=也可以通过鼠标悬停查看
2021-05-02 06:31:55
“页面中所有可见的文本都在文本节点中。” 不,它也可能来自CSS 规则中content属性::before::after
2021-05-05 06:31:55

innerText获取和设置内容为纯文本,编码和解码。innerHTML获取和设置 HTML 格式的内容时。

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