当其他节点被JavaScript

时间:2015-06-23 18:29:52

标签: javascript html nodes

我知道文本节点会自动添加到节点之间的空白区域,至少在html中的<body>标记中添加节点时,但我不确定它们是否附加了JavaScript。关于这个案子,我在网上找不到任何答案。我使用以下代码测试了它,但即使body.childNodes没有在JS附加节点之间返回文本节点,看起来仍然实现了带有额外空白的格式。 (我的简短html文档显示了由<body>标签直接插入的两个段落和两个由JS附加的段落。)我已经在console.log的调用下放置了浏览器控制台在评论中返回的内容。此外,如果在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>

1 个答案:

答案 0 :(得分:1)

文本节点不会自动插入。

只是HTML源代码中的空格被视为文本。并且文本成为DOM中的文本节点。

如果删除HTML源代码中元素之间的所有空格,则不会有这些文本节点。

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

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

事实上,这些段落显示在不同的行中,因为它们有display : blockTherefore

  

在块格式化上下文中,框一个接一个地垂直排列