JavaScript追加其他节点时是否自动追加文本节点

Are text nodes automatically appended when other nodes are appended by JavaScript

我知道节点之间的白色space会自动添加文本节点,至少在html中的<body>标签中添加节点时是这样,但我不确定当它们附加 JavaScript 时,请注意这一点。我在网上找不到关于这个案例的任何答案。我用下面的代码测试了它,但即使 body.childNodes 没有 return JS 附加节点之间的文本节点,它看起来像带有附加白色 space 的格式仍然被实现。 (我的简短 html 文档显示了两个由 <body> 标记直接插入的段落和两个由 JS 附加的段落。)我已经将浏览器控制台 returned 的内容放在对 [= 的调用下的注释中15=]。另外,如果在 JS 附加节点时仍然添加文本节点,我将如何删除它们,因为它们没有出现在 .childNodes?

<!doctype html>
<body>
  <p>1</p>
  <p>2</P>
</body>
<script>
  var i = document.createElement("p");
  i.textContent = "I";
  document.body.appendChild(i);
  var ii = document.createElement("p");
  ii.textContent = "II";
  document.body.appendChild(ii);
  console.log(document.body.childNodes);
  //NodeList {
  //0: Text{}
  //1: HTMLParagraphElement{}
  //2: Text{}
  //3: HTMLParagraphElement{}
  //4: Text{}
  //5: HTMLScriptElement{}
  //6: HTMLParagraphElement{}
  //7: HTMLParagraphElement{}
  //}
</script>

不会自动插入文本节点。

只是 HTML 源中的 space 被视为文本。并且 text 成为 DOM.

中的文本节点

如果您删除 HTML 源中元素之间的所有白色space,您将不会有那些文本节点。

并且如果您只将元素节点添加到 DOM,则不会神奇地插入任何文本节点。

请注意插入的段落确实在不同的行中。但这并不是因为它们之间出现了换行符。事实上,那是没有用的,因为所有的白色space(包括换行符)都会折叠成一个简单的space(除非由white-space指定)。

实际上,段落出现在不同的行中,因为它们有display: block. Therefore

In a block formatting context, boxes are laid out one after the other, vertically