如何将子节点附加到特定位置

Jar*_*rco 49 javascript dom parent-child

如何将childNode附加到javascript中的特定位置?

我想将一个childNode添加到div中的第3个位置.它背后还有其他节点需要向后移动(3变为4等)

Fel*_*ing 79

你可以使用.insertBefore():

parentElement.insertBefore(newElement, parentElement.children[2]);
Run Code Online (Sandbox Code Playgroud)

  • 你能解释为什么你选择了`parentElement.children`而不是`parentElement.childNodes`?前者只列出了`Element`s的子项,因此忽略了`Text`s的节点,例如......假设子节点可能包含所有类型的节点不是更好吗??? (8认同)
  • 在孩子上使用 childNodes 是正确的方法。 (2认同)

Mau*_*nes 27

为此,您有3个选项.insertBefore(),.insertAdjacentElement()或.insertAdjacentHtml()


.insertBefore()

var insertedElement = parentElement.insertBefore(newElement, referenceElement);
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你可以像Felix Kling一样回答

var insertedElement = parentElement.insertBefore(newElement, parentElement.children[2]);
Run Code Online (Sandbox Code Playgroud)

.insertAdjacentElement()

referenceElement.insertAdjacentElement (where, newElement);
Run Code Online (Sandbox Code Playgroud)

在你的情况下,它会

parentElement.children[1].insertAdjacentElement("afterEnd", newElement);
Run Code Online (Sandbox Code Playgroud)

.insertAdjacentHTML()

referenceElement.insertAdjacentElement (where, newElementHTML);
Run Code Online (Sandbox Code Playgroud)

在你的情况下,它会

parentElement.children[1].insertAdjacentElement("afterEnd", "<td>newElementHTML</td>");
Run Code Online (Sandbox Code Playgroud)


Leo*_*uli 7

在特定索引处插入子节点

简化,

Element.prototype.insertChildAtIndex = function(child, index) {
  if (!index) index = 0
  if (index >= this.children.length) {
    this.appendChild(child)
  } else {
    this.insertBefore(child, this.children[index])
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,

var child = document.createElement('div')
var parent = document.body
parent.insertChildAtIndex(child, 2)
Run Code Online (Sandbox Code Playgroud)

田田!

请注意扩展本机可能会很麻烦

  • 为什么要给出警告而不是只编写一个可以用父节点调用的通用函数? (2认同)