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

我有元素E,我正在附加一些元素。 突然之间,我发现下一个元素应该是E的第一个孩子。怎么办? 方法unshift不工作,因为E是一个对象,而不是数组。

很长的路要迭代槽E的孩子,并move'em键++,但我相信有一个更漂亮的方式。

var eElement; // some E DOM instance var newFirstElement; //element which should be first in E eElement.insertBefore(newFirstElement, eElement.firstChild); 

2017版

您可以使用

 element.insertAdjacentElement('afterbegin', element) 

来自MDN :

insertAdjacentElement()方法将给定的元素节点插入到相对于被调用的元素的给定位置。

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

元件
要插入树中的元素。

同样在插入的家族中,还有兄弟方法:

element.insertAdjacentHTML('afterbegin','htmlText')用于直接注入htmlstring,就像innerHTML一样,但不会覆盖所有内容,因此您可以跳过document.createElement压缩过程,甚至可以使用string操作过程构build整个组件

element.insertAdjacentText用于将清理string注入到元素中。 没有更多的encode/decode

你可以直接实现它我所有的窗口html元素。
喜欢这个 :

 HTMLElement.prototype.appendFirst=function(childNode){ if(this.firstChild)this.insertBefore(childNode,this.firstChild); else this.appendChild(childNode); }; 

接受的答案重构成一个函数:

 function prependChild(parentEle, newFirstChildEle) { parentEle.insertBefore(newFirstChildEle, parentEle.firstChild) } 

除非我误解了:

 $("e").prepend("<yourelem>Text</yourelem>"); 

要么

 $("<yourelem>Text</yourelem>").prependTo("e"); 

虽然听起来像是从你的描述来看,附加了一些条件,所以

 if (SomeCondition){ $("e").prepend("<yourelem>Text</yourelem>"); } else{ $("e").append("<yourelem>Text</yourelem>"); } 
 parentElement.prepend(newFirstChild); 

这是(有可能)ES7中的新增function。 这是香草JS,比以前的选项更可读。 它目前在Chrome,FF和Opera中可用。 运输商应该能够处理它,直到它到处可用。

PS您可以直接预置string

 parentElement.prepend('This text!'); 

链接: developer.mozilla.org – Polyfill

我想你正在寻找jQuery中的.prepend函数。 示例代码:

 $("#E").prepend("<p>Code goes here, yo!</p>"); 

我创build了这个原型来预先添加元素到父元素。

 Node.prototype.prependChild = function (child: Node) { this.insertBefore(child, this.firstChild); return this; };