如何将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; };