insertbefore - Javascript Anexar Niño DESPUÉS del Elemento
insertbefore javascript (6)
Esta pregunta ya tiene una respuesta aquí:
Me gustaría agregar un elemento li después de otro li dentro de un elemento ul usando javascript. Este es el código que tengo hasta ahora.
var parentGuest = document.getElementById("one");
var childGuest = document.createElement("li");
childGuest.id = "two";
Estoy familiarizado con appendChild,
parentGuest.appendChild(childGuest);
Sin embargo, esto añade el nuevo elemento dentro del otro, y no después. ¿Cómo puedo añadir el nuevo elemento después del existente? Gracias.
<ul>
<li id="one"><!-- where the new li is being put --></li>
<!-- where I want the new li -->
</ul>
después es ahora un método de JavaScript
Citando a MDN
El método
ChildNode.after()
inserta un conjunto de objetos Node oDOMString
en la lista de hijos del padre de esteChildNode
, justo después de esteChildNode
. Los objetos DOMString se insertan como nodos de texto equivalentes.
El soporte del navegador es Chrome (54+), Firefox (49+) y Opera (39+). No es compatible con IE y Edge.
Retazo
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>
En el fragmento, también utilicé otro término.
Debe agregar el nuevo elemento al elemento primario existente antes del siguiente hermano del elemento. Me gusta:
var parentGuest = document.getElementById("one");
var childGuest = document.createElement("li");
childGuest.id = "two";
parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling);
O si quieres simplemente añadirlo, entonces:
var parentGuest = document.getElementById("one");
var childGuest = document.createElement("li");
childGuest.id = "two";
parentGuest.parentNode.appendChild(childGuest);
Esto basta:
parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling || null);
ya que si el refnode
(segundo parámetro) es nulo, se realiza un appendChild regular. Consulte aquí: http://reference.sitepoint.com/javascript/Node/insertBefore
En realidad dudo que el || null
Se requiere || null
, inténtalo y verás.
Puedes usar:
if (parentGuest.nextSibling) {
parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling);
}
else {
parentGuest.parentNode.appendChild(childGuest);
}
Pero como Pavel señaló, el elemento de referencia puede ser nulo / indefinido, y si es así, insertBefore comporta como appendChild . Entonces lo siguiente es equivalente a lo anterior:
parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling);
Si está buscando una solución JS simple, simplemente use insertBefore()
contra nextSibling
.
Algo como:
parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling);
Tenga en cuenta que el valor predeterminado de nextSibling
es null
, por lo tanto, no necesita hacer nada especial para eso.
Actualización: Ni siquiera necesita la verificación de la presencia de parentGuest.nextSibling
como la respuesta actualmente aceptada, porque si no hay un próximo hermano, devolverá null
, y pasará null
al segundo argumento de insertBefore()
significa: append at el fin.
Referencia:
.
SI está utilizando jQuery (ignore lo contrario, he indicado claramente la respuesta de JS anterior), puede aprovechar el conveniente método after()
:
$("#one").after("<li id=''two''>");
Referencia:
Tambien podrias hacer
function insertAfter(node1, node2) {
node1.outerHTML += node2.outerHTML;
}
o
function insertAfter2(node1, node2) {
var wrap = document.createElement("div");
wrap.appendChild(node2.cloneNode(true));
var node2Html = wrap.innerHTML;
node1.insertAdjacentHTML(''afterend'', node2Html);
}