Javascript在元素之后附加子元素

IT技术 javascript getelementbyid appendchild createelement
2021-02-20 20:22:45

我想使用 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>
6个回答

您可以使用:

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);
if-else 是不必要的:insertBefore 的第二个参数可以为 null 或未定义
2021-05-14 20:22:45

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

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

如果您正在寻找一个简单的 JS 解决方案,那么您只需使用insertBefore()针对nextSibling.

就像是:

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

请注意,默认值为nextSiblingis null,因此您无需为此做任何特别的事情。

更新:您甚至不需要像当前接受的答案那样if检查是否存在parentGuest.nextSibling,因为如果没有下一个兄弟姐妹,它将 return null,并传递null给 mean insertBefore(): append 在最后的第二个参数

参考:

.

如果您使用的是 jQuery(否则请忽略,我在上面已经说明了简单的 JS 答案),您可以利用方便的after()方法:

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

参考:

我认为如果您不使用 jQuery,那么 Yoshi 的答案是正确的。这里也提到了netlobo.com/javascript-insertafter.html - 我只是倾向于假设 jQuery 是超级默认的。我的错误:D
2021-05-01 20:22:45
请原谅我的无知,但这是如何用 javascript 实现的?你能展示一下它如何与我当前的代码一起工作吗,谢谢。
2021-05-09 20:22:45
一年半后,我得到了这个答案的投票。因此,我已更新它以包含尽可能短的纯 JS 解决方案版本,以及一个指向 Mozilla 文档的链接。抱歉没有早点做(因为其他人已经用非常相似的实现做了,我认为我不需要)。
2021-05-16 20:22:45

这足够了:

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

因为如果refnode(第二个参数)为空,则执行常规的 appendChild。见这里:http : //reference.sitepoint.com/javascript/Node/insertBefore

其实我怀疑这|| null是必需的,试试看。

after 现在是一个 JavaScript 方法

MDN 文档

引用 MDN

ChildNode.after()方法DOMString在 thisChildNode的父级的子级列表中插入一组 Node 或对象,就在 this 之后ChildNodeDOMString 对象作为等效的 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>

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