如何使用常规 JavaScript 实现前置和附加?

IT技术 javascript append prepend
2021-02-10 18:55:01

如何在不使用 jQuery 的情况下使用常规 JavaScript实现前置附加

6个回答

这是一个让你继续前进的片段:

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它之前。

这会创建一个元素并将其添加到 dom,append 和 prepend 的工作方式不同
2021-03-30 18:55:01
谢谢,为什么在 prepend 之前只使用 insertBefore 而不创建额外的 div?喜欢 Grumdrig 的回答?
2021-03-31 18:55:01
现在是 2015 年。我们可以有一个内置的prepend()方法吗?
2021-04-08 18:55:01
Node.append 或 node.appendChild 是 void 方法,请改用 insertBefore(node,null)
2021-04-08 18:55:01
与 Grumdig 的回答相比,我得到了这个
2021-04-12 18:55:01

也许您在询问DOM 方法 appendChildinsertBefore.

parentNode.insertBefore(newChild, refChild)

在现有子节点之前插入节点newChild作为parentNode子节点refChild(返回newChild。)

如果refChild为空,newChild则添加到子项列表的末尾。同样,更易读,使用 parentNode.appendChild(newChild).

所以前置基本上就是这样 function prepend(tag, ele) { var x =document.getElementsByTagName(tag)[0]; x.insertBefore(ele ,x.children[0]); }
2021-03-26 18:55:01

您在这里没有给我们太多内容,但我认为您只是在问如何将内容添加到元素的开头或结尾?如果是这样,您可以通过以下方法轻松完成:

//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;

相当容易。

@Munzilla 此方法将强制浏览器再次解析所有现有子项。在上述解决方案中,浏览器只需要将给定的子项附加到文档中。
2021-03-30 18:55:01
不错,正是我要找的。
2021-04-01 18:55:01

如果您想插入原始 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 节点。
2021-03-30 18:55:01
@spanky 您说得对,该语句可以有多种解释,我的实际意思是新创建的 DOM 节点insertAdjacentHTML(不是根节点,也不是根节点的现有后代)
2021-04-05 18:55:01

我在我的项目中添加了这个,它似乎有效:

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>`);