Answers:
也许您在问DOM方法 appendChild
和insertBefore
。
parentNode.insertBefore(newChild, refChild)
将节点
newChild
作为parentNode
现有子节点之前的子节点插入refChild
。(返回newChild
。)如果
refChild
为null,则将其newChild
添加到子级列表的末尾。等效地,更可读地使用parentNode.appendChild(newChild)
。
function prepend(tag, ele) { var x =document.getElementsByTagName(tag)[0]; x.insertBefore(ele ,x.children[0]); }
这是一个片段,可以助您一臂之力:
theParent = document.getElementById("theParent");
theKid = document.createElement("div");
theKid.innerHTML = 'Are we there yet?';
// append theKid to the end of theParent
theParent.appendChild(theKid);
// prepend theKid to the beginning of theParent
theParent.insertBefore(theKid, theParent.firstChild);
theParent.firstChild
将为我们提供其中的第一个元素的引用,theParent
并放在其theKid
前面。
prepend()
方法吗?
您在这里没有给我们太多的工作,但是我想您只是在问如何在元素的开头或结尾添加内容?如果是这样,这是您可以轻松完成的操作:
//get the target div you want to append/prepend to
var someDiv = document.getElementById("targetDiv");
//append text
someDiv.innerHTML += "Add this text to the end";
//prepend text
someDiv.innerHTML = "Add this text to the beginning" + someDiv.innerHTML;
挺容易。
如果要插入原始HTML字符串,无论多么复杂,都可以使用:
insertAdjacentHTML
和适当的第一个参数:
'beforebegin' 在元素本身之前。 'afterbegin' 在元素内部,在其第一个子元素之前。 'beforeend' 在元素的最后一个子元素之后。 'afterend' 在元素本身之后。
提示:您始终可以调用Element.outerHTML
以获取表示要插入的元素的HTML字符串。
用法示例:
document.getElementById("foo").insertAdjacentHTML("beforeBegin",
"<div><h1>I</h1><h2>was</h2><h3>inserted</h3></div>");
注意: insertAdjacentHTML
不会保留带有的监听器.addEventLisntener
。
insertAdjacentHTML
不保留侦听器...”什么侦听器?它是HTML,因此尚无任何要绑定的元素。如果您指的是里面的现有元素foo
,那不是一个正确的声明。整个问题.insertAdjacentHTML
在于它确实保留了侦听器。您可能正在考虑.innerHTML += "..."
,这会破坏旧的DOM节点。
insertAdjacentHTML
(不是根,也不是根的现有后代)
我将此添加到我的项目中,它似乎可以工作:
HTMLElement.prototype.prependHtml = function (element) {
const div = document.createElement('div');
div.innerHTML = element;
this.insertBefore(div, this.firstChild);
};
HTMLElement.prototype.appendHtml = function (element) {
const div = document.createElement('div');
div.innerHTML = element;
while (div.children.length > 0) {
this.appendChild(div.children[0]);
}
};
例:
document.body.prependHtml(`<a href="#">Hello World</a>`);
document.body.appendHtml(`<a href="#">Hello World</a>`);
为了简化您的生活,您可以扩展HTMLElement
对象。它可能不适用于较旧的浏览器,但绝对会让您的生活更轻松:
HTMLElement = typeof(HTMLElement) != 'undefined' ? HTMLElement : Element;
HTMLElement.prototype.prepend = function(element) {
if (this.firstChild) {
return this.insertBefore(element, this.firstChild);
} else {
return this.appendChild(element);
}
};
因此,下次您可以执行以下操作:
document.getElementById('container').prepend(document.getElementById('block'));
// or
var element = document.getElementById('anotherElement');
document.body.prepend(div);
var insertedElement = parentElement.insertBefore(newElement, referenceElement);
如果referenceElement为null或未定义,则newElement将插入到子节点列表的末尾。
insertedElement The node being inserted, that is newElement
parentElement The parent of the newly inserted node.
newElement The node to insert.
referenceElement The node before which newElement is inserted.
可以在此处找到示例:Node.insertBefore
这不是最好的方法,但是如果有人想在所有内容之前插入元素,这是一种方法。
var newElement = document.createElement("div");
var element = document.getElementById("targetelement");
element.innerHTML = '<div style="display:none !important;"></div>' + element.innerHTML;
var referanceElement = element.children[0];
element.insertBefore(newElement,referanceElement);
element.removeChild(referanceElement);