Javascript ajoute enfant après élément [dupliquer]

cette question a déjà une réponse ici:

j'aimerais ajouter un élément li après un autre li à l'intérieur d'un élément ul en utilisant javascript, C'est le code que j'ai donc loin..

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

je suis familier avec appendChild,

parentGuest.appendChild(childGuest);

cependant ceci ajoute le nouvel élément à l'intérieur de l'autre, et pas après. Comment puis-je ajouter le nouvel élément après l'existant? Grâce.

<ul>
  <li id="one"><!-- where the new li is being put --></li>
  <!-- where I want the new li -->
</ul>
60
demandé sur Wez 2011-08-31 18:09:54

6 réponses

vous pouvez utiliser:

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

mais comme Pavel l'a souligné, le referencelement peut être nul/non défini, et si oui, avant se comporte comme appendChild . Ainsi, ce qui suit est équivalent à ce qui précède:

parentGuest.parentNode.insertBefore(childGuest, parentGuest.nextSibling);
100
répondu Yoshi 2014-03-27 07:49:24

vous devez ajouter le nouvel élément au parent de l'élément existant avant le prochain frère de l'élément. Comme:

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

ou si vous voulez juste l'Ajouter, puis:

var parentGuest = document.getElementById("one"); 
var childGuest = document.createElement("li"); 
childGuest.id = "two"; 
parentGuest.parentNode.appendChild(childGuest);
15
répondu vitalikaz 2016-03-19 22:57:52

si vous recherchez une solution js simple, vous n'avez qu'à utiliser insertBefore() contre nextSibling .

quelque chose comme:

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

notez que la valeur par défaut de nextSibling est null , donc vous n'avez pas besoin de faire quoi que ce soit de spécial pour cela.

mise à Jour: Vous n'avez même pas besoin de la if vérifier la présence de parentGuest.nextSibling comme actuellement accepté de répondre à n', parce que s'il n'y a pas de prochain frère, il retournera null , et passer null au deuxième argument de insertBefore() signifie: ajouter à la fin.

référence:

.

si vous utilisez jQuery (ignorer autrement, j'ai déclaré simple réponse JS ci-dessus) , vous pouvez tirer parti de la pratique after() méthode:

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

référence:

14
répondu Meligy 2016-09-25 19:37:13

cela suffit :

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

puisque si le refnode (second paramètre) est nul, un appendice régulier est effectué. voir ici: http://reference.sitepoint.com/javascript/Node/insertBefore

en fait je doute que le || null est nécessaire, essayer et voir.

1
répondu HBP 2011-08-31 15:07:14

, Vous pouvez aussi le faire

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

ou

function insertAfter2(node1, node2) {
    var wrap = document.createElement("div");
    wrap.appendChild(node2.cloneNode(true));
    var node2Html = wrap.innerHTML;
    node1.insertAdjacentHTML('afterend', node2Html);
}
0
répondu nathnolt 2015-11-19 15:52:12

après est maintenant une méthode JavaScript

documentation MDN

citant MDN

la méthode ChildNode.after() insère un ensemble de noeuds ou DOMString objets dans la liste des enfants de ce ChildNode 's parent, juste après ce ChildNode . Les objets DOMString sont insérés comme des noeuds de texte équivalents.

la prise en charge du navigateur est Chrome (54+), Firefox (49+) et Opera(39+). Ça ne supporte pas IE et Edge.

Extrait de

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>

dans l'extrait, j'ai utilisé un autre terme ajoute trop

0
répondu Sagar V 2017-07-20 13:52:11