如何将DOM元素设置为第一个子元素?

Pop*_*ara 203 javascript arrays jquery dom elements

我有元素E,我正在添加一些元素.突然之间,我发现下一个元素应该是E的第一个孩子.诀窍是什么,怎么做?方法unshift不起作用,因为E是一个对象,而不是数组.

很长的路要走迭代E的孩子并移动'em键++,但我确信有一个更漂亮的方式.

nem*_*isj 422

var eElement; // some E DOM instance
var newFirstElement; //element which should be first in E

eElement.insertBefore(newFirstElement, eElement.firstChild);
Run Code Online (Sandbox Code Playgroud)

  • 如果父母中没有元素,则无论如何都会添加子项. (69认同)
  • 你是我的朋友,让自己变成熊!有用的额外发现.http://docs.jquery.com/Manipulation/insertBefore (3认同)
  • @Sergey,也适用于我的文本节点,在Firefox和Chromium上测试过.你用了什么浏览器?你确定问题不在你身边吗?您是否愿意准备一个能够重现问题的片段/ jsfiddle? (3认同)

per*_*mon 84

2017版

您可以使用

targetElement.insertAdjacentElement('afterbegin', newFirstElement)
Run Code Online (Sandbox Code Playgroud)

来自MDN:

insertAdjacentElement()方法在给定位置相对于调用它的元素插入给定元素节点.

position
一个DOMString,表示相对于该元素的位置; 必须是以下字符串之一
beforebegin::在元素本身之前.
afterbegin:就在元素内部,在它的第一个孩子之前.
beforeend:就在元素里面,在它的最后一个孩子之后.
afterend:元素本身之后.

element
要插入树中的元素.

同样在家庭中insertAdjacent有兄弟方法:

element.insertAdjacentHTML('afterbegin','htmlText')直接注入html字符串,innerHTML但没有覆盖一切,所以你可以跳过压迫过程,document.createElement甚至用字符串操作过程构建整个组件

element.insertAdjacentText用于将sanitize字符串注入元素.不再encode/decode

  • 很好的建议,但为什么要“回到2017”,即使在ie8上,这也是标准方法 (2认同)

Gib*_*olt 70

2018年版

parentElement.prepend(newFirstChild);
Run Code Online (Sandbox Code Playgroud)

这是现代JS!它比以前的选项更具可读性.目前可在Chrome,FF和Opera中使用.

PS你可以直接添加字符串

parentElement.prepend('This text!');
Run Code Online (Sandbox Code Playgroud)

developer.mozilla.org

我可以使用 - - 2018年10月的86%

填充工具

  • `append()` 也存在,其工作方式与 `prepend()` 相同,但在最后 (4认同)
  • 很好的解决方案,谢谢!令我感到恼火的是,他们决定在末尾添加一个孩子是.appendChild(),但在其开始添加一个孩子是.prepend(),而不是遵循约定并称其为.prependChild()。 (2认同)
  • 当我看到这些问题询问如何实现“prepend”时,我也很困惑,而我发现它已经是这样了。:( 好吧,过去不存在。 (2认同)

yor*_*org 10

您可以直接在我所有的窗口html元素中实现它.
像这样 :

HTMLElement.prototype.appendFirst=function(childNode){
    if(this.firstChild)this.insertBefore(childNode,this.firstChild);
    else this.appendChild(childNode);
};
Run Code Online (Sandbox Code Playgroud)

  • `prepend` 是普通 JS 的等价物,不需要原型。它将成为 ES7 中的标准,如果可能的话,您应该在您的应用程序中使用 (2认同)
  • yorg - 仅供参考,可以将“null”作为“insertBefore”中的引用元素传递,不需要上面的分支。 (2认同)

Jos*_*tra 6

接受的答案重构为函数:

function prependChild(parentEle, newFirstChildEle) {
    parentEle.insertBefore(newFirstChildEle, parentEle.firstChild)
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*man 5

除非我误解了:

$("e").prepend("<yourelem>Text</yourelem>");
Run Code Online (Sandbox Code Playgroud)

或者

$("<yourelem>Text</yourelem>").prependTo("e");
Run Code Online (Sandbox Code Playgroud)

虽然从你的描述中听起来好像有一些附加条件,所以

if (SomeCondition){
    $("e").prepend("<yourelem>Text</yourelem>");
}
else{
    $("e").append("<yourelem>Text</yourelem>");
}
Run Code Online (Sandbox Code Playgroud)