Javascript ajoute enfant après élément [dupliquer]
cette question a déjà une réponse ici:
- Comment insérer un élément après un autre élément en JavaScript sans utiliser une bibliothèque? 17 réponses
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>
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);
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);
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:
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.
, 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);
}
après est maintenant une méthode JavaScript
citant MDN
la méthode
ChildNode.after()
insère un ensemble de noeuds ouDOMString
objets dans la liste des enfants de ceChildNode
's parent, juste après ceChildNode
. 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