JavaScript追加子元素AFTER元素


75

我想使用javascript在ul元素内的另一个li后面附加一个li元素,这是我到目前为止的代码。

var parentGuest = document.getElementById("one");
var childGuest = document.createElement("li");
childGuest.id = "two";

我熟悉appendChild,

parentGuest.appendChild(childGuest);

但是,这会将新元素附加在另一个元素内部,而不是之后。如何在现有元素之后追加新元素?谢谢。

<ul>
  <li id="one"><!-- where the new li is being put --></li>
  <!-- where I want the new li -->
</ul>

1
显示一些html ..父母是ul还是li?
乔纳·卡兹

我投票决定重新开放此质量检查程序,因为我想添加新的更新的答案,因为此质量检查程序仍作为google上的热门搜索结果弹出。
Qwerty

Answers:


111

您可以使用:

if (parentGuest.nextSibling) {
  parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling);
}
else {
  parentGuest.parentNode.appendChild(childGuest);
}

但是正如Pavel指出的那样,referenceElement可以为null / undefined,如果是,则insertBefore的行为就像appendChild一样。因此,以下内容等同于上述内容:

parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling);

9
if-else是不必要的:insertBefore的第二个参数可以为null或未定义
Pavel

17

您需要在元素的下一个同级之前将新元素附加到现有元素的父元素上。喜欢:

var parentGuest = document.getElementById("one");
var childGuest = document.createElement("li");
childGuest.id = "two";
parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling);

或者,如果您只想附加它,则:

var parentGuest = document.getElementById("one"); 
var childGuest = document.createElement("li"); 
childGuest.id = "two"; 
parentGuest.parentNode.appendChild(childGuest);

17

如果您正在寻找普通的JS解决方案,则只需使用insertBefore()nextSibling

就像是:

parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling);

请注意,默认值nextSiblingnull,因此,您不需要为此做任何特殊的事情。

更新:你甚至都不需要if的检查存在parentGuest.nextSibling像目前接受的答案呢,因为如果没有下一个兄弟,它将返回null,并传递null到的第二个参数insertBefore()是指:追加在最后。

参考:

如果您使用的是jQuery(否则,请忽略上面的JS答案),您可以利用便捷的after()方法:

$("#one").after("<li id='two'>");

参考:


1
请原谅我的无知,但是如何用javascript实现呢?您能否显示它如何与我当前的代码一起使用,谢谢。
Wez

我认为,如果您不使用jQuery,那么Yoshi的答案是正确的。这里也提到了netlobo.com/javascript-insertafter.html-我只是倾向于假设jQuery是超级默认值。我的错误:D
Meligy 2011年

1
一年半之后,我对这个答案投了赞成票。因此,我对其进行了更新,以包括纯JS解决方案的尽可能短的版本,并在其上提供指向Mozilla文档的链接。抱歉,您没有更早地执行此操作(因为其他人已经使用非常相似的实现来执行此操作,所以我认为我不需要这样做)。
Meligy


0

你也可以

function insertAfter(node1, node2) {
    node1.outerHTML += node2.outerHTML;
}

要么

function insertAfter2(node1, node2) {
    var wrap = document.createElement("div");
    wrap.appendChild(node2.cloneNode(true));
    var node2Html = wrap.innerHTML;
    node1.insertAdjacentHTML('afterend', node2Html);
}

0

after是现在的JavaScript方法

MDN文档

报价MDN

ChildNode.after()方法DOMString在此ChildNode父级的子级列表中插入一组Node或对象ChildNode。DOMString对象作为等效的Text节点插入。

浏览器支持Chrome(54 +),Firefox(49+)和Opera(39+)。它不支持IE和Edge。

片段

var elm=document.getElementById('div1');
var elm1 = document.createElement('p');
var elm2 = elm1.cloneNode();
elm.append(elm1,elm2);

//added 2 paragraphs
elm1.after("This is sample text");
//added a text content
elm1.after(document.createElement("span"));
//added an element
console.log(elm.innerHTML);
<div id="div1"></div>

在片段中,我用另一个词追加

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.