gpt4 book ai didi

javascript - 在 Javascript 中在同级之前添加节点

转载 作者:行者123 更新时间:2023-12-03 10:37:37 25 4
gpt4 key购买 nike

所以我正在学习如何操作 Dom 元素和添加节点。

我使用这个js代码:

var parent = document.getElementById('div2');
var newNode = document.createElement('p');
var text = document.createTextNode('Text Node!');
newNode.appendChild(text);
parent.insertBefore(newNode, parent.childNodes[4]);

这是我在通常的 Vanilla 设置中的 html:

<div id="div2">    
<p> abc </p>
<p> cde </p>
<p> efg </p>
<p> ghi </p>
</div>

输出是这样的:

abc
cde
Text Node!
efg
ghi

这不是走错地方了吗?这不是插入之前的insertBefore childNode[2]吗?由于某种原因,当我更改 childNode 之后的数字时,文本没有显示在我期望的位置?这是为什么?节点不是还是像数组一样从 0 开始吗​​?另一个例子,使用 childNode[6] 将其放在 efg 之后。我认为应该是 insertBefore childNode[3]。

我知道这个问题可能很基本,但我不明白为什么。谢谢!

最佳答案

childNodes 包括 Text 节点(以及注释节点等,但您没有这些节点)。在 HTML 中,元素之间的空白是 Text 节点,因此 div2 具有:

  • 索引 0:带有换行符和一些空格或制表符的 Text 节点
  • 索引 1:第一段的 Element 节点(其中包含带有 “abc”Text 节点)
  • 索引 2:带有换行符和一些空格或制表符的 Text 节点
  • 索引 3:第二段的 Element 节点(其中包含带有 “cde”Text 节点)
  • 索引 4:带有换行符和一些空格或制表符的 Text 节点
  • 索引 5:第三段的 Element 节点(其中包含带有 “efg”Text 节点)
  • 索引 6:带有换行符和一些空格或制表符的 Text 节点
  • 索引 7:第四段的 Element 节点(其中包含带有 “ghi”Text 节点)
  • 索引 8:带有换行符和一些空格或制表符的 Text 节点

实例:

var div2 = document.getElementById("div2");
var index, child;
snippet.log("div2's child node types:");
for (index = 0; index < div2.childNodes.length; ++index) {
child = div2.childNodes[index];
snippet.log(index + ": " + nodeTypeName(child.nodeType));
}

// Type values from http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-111237558
function nodeTypeName(type) {
switch (type) {
case 1: return "ELEMENT_NODE";
case 2: return "ATTRIBUTE_NODE";
case 3: return "TEXT_NODE";
case 4: return "CDATA_SECTION_NODE";
case 5: return "ENTITY_REFERENCE_NODE";
case 6: return "ENTITY_NODE";
case 7: return "PROCESSING_INSTRUCTION_NODE";
case 8: return "COMMENT_NODE";
case 9: return "DOCUMENT_NODE";
case 10: return "DOCUMENT_TYPE_NODE";
case 11: return "DOCUMENT_FRAGMENT_NODE";
case 12: return "NOTATION_NODE";
default:
return "Unknown node type";
}
}
<div id="div2">    
<p> abc </p>
<p> cde </p>
<p> efg </p>
<p> ghi </p>
</div>
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

在现代浏览器上,您可以使用 children 来代替,它只包含元素,而不包含其他类型的节点。

关于javascript - 在 Javascript 中在同级之前添加节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28927011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com