Javascript добавляет дочерний элемент после элемента [дубликат]
этот вопрос уже есть ответ здесь:
Я хотел бы добавить элемент li после другого li внутри элемента ul с помощью javascript, это код, который у меня есть до сих пор..
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);
}
но, как указал Павел,referenceElement может быть null / undefined, и если это так,insertBefore ведет себя так же, как appendChild. Поэтому следующий эквивалентно выше:
parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling);
вам нужно добавить новый элемент к родителю существующего элемента до следующего брата элемента. Например:
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);
обратите внимание, что значение по умолчанию nextSibling
is null
, так что вам не нужно делать ничего особенного для этого.
обновление: вам даже не нужно if
проверять наличие parentGuest.nextSibling
как и принятый в настоящее время ответ, потому что, если нет следующего брата, он вернется null
, и проходя мимо null
для 2-й аргумент insertBefore()
означает: добавить в конце.
ссылки:
.
если вы используете jQuery (игнорировать в противном случае, я указал простой ответ JS выше), вы можете использовать удобный after()
способ:
$("#one").after("<li id='two'>");
ссылки:
этого достаточно :
parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling || null);
С, если refnode
(второй параметр) имеет значение null, выполняется обычный appendChild. смотрите здесь : http://reference.sitepoint.com/javascript/Node/insertBefore
на самом деле я сомневаюсь, что || null
требуется, попробуйте и посмотрите.
вы также можете сделать
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);
}
after теперь является методом JavaScript
цитируя MDN
на
ChildNode.after()
метод вставляет набор узлов илиDOMString
объекты в списке детей этогоChildNode
родитель, сразу после этогоChildNode
. Виде domstring. объекты вводятся как эквивалент текста узлов.
поддержка браузера Chrome (54+), Firefox(49+) и Opera(39+). Он не поддерживает IE и Край.
фрагмент
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>
в фрагменте я использовал другой термин добавить слишком