Comment insérer un élément après l'autre élément en JavaScript sans l'aide d'une bibliothèque?
Il y a insertBefore()
en JavaScript, mais comment puis-je insérer un élément après un autre élément sans l'aide de jQuery ou d'une autre bibliothèque?
- si vous avez besoin de le cas spécifique du dernier nœud enfant - stackoverflow.com/questions/5173545/...
- developer.mozilla.org/en-US/docs/Web/API/Element/... ou developer.mozilla.org/en-US/docs/Web/API/Element/...
- c'est très bien. merci. savez-vous quand est-ce que insertAdjacentElement introduit?
- Selon le MDN, il est pris en charge dans IE8 et Firefox 48 (2016 août 08). Suivre le sentier: bugzilla.mozilla.org/show_bug.cgi?id=811259 --> w3.org/Bugs/Public/show_bug.cgi?id=19962 (2016 14 Mars)
Vous devez vous connecter pour publier un commentaire.
Où
referenceNode
est le nœud que vous souhaitez mettrenewNode
après. SireferenceNode
est le dernier enfant dans son élément parent, c'est très bien, parce quereferenceNode.nextSibling
seranull
etinsertBefore
poignées de cas par l'ajout, à la fin de la liste.Donc:
l'Essayer ici.
insertBefore()
travaille avec des nœuds de texte. Pourquoi voulez-vousinsertAfter()
à être différent? Vous devez créer une autre paire de fonctions nomméinsertBeforeElement()
etinsertAfterElement()
pour que.insertBefore
, cette fonction n'accepte pas un nullreferenceNode
- je suis allé de l'avant et posté une fonction qui le fait, et a le comportement inverse deinsertBefore
stackoverflow.com/a/51437118/283851"html is not defined"
@DGRFDSGN e.g:const html='';
Simple JavaScript Serait le Suivant:
Avant D'Ajouter:
Ajouter Après:
Mais, Mélanger Quelques Prototypes Là Pour la Facilité d'Utilisation
Par la construction de prototypes suivants, vous serez en mesure d'appeler ces fonctions directement à partir nouvellement créé éléments.
newElement.appendBefore(element);
newElement.appendAfter(element);
.appendBefore(élément) Prototype
.appendAfter(élément) Prototype
Et Pour Voir le Tout En Action, Exécutez le Code Suivant Extrait de
JS:
CSS:
HTML:
Exécuter sur JSFiddle
existingElement.appendAfter(newElement);
. Voyez ce que je veux dire à cette mise à jour jsfiddle.Une rapide recherche sur Google révèle ce script
targetElement.nextSibling
sera de retournull
. Lorsquenode.insertBefore
est appelée avecnull
comme deuxième argument, alors il faudra ajouter le nœud à la fin de la collecte. En d'autres termes, leif(parent.lastchild == targetElement) {
branche est superflu, carparent.insertBefore(newElement, targetElement.nextSibling);
va traiter correctement tous les cas, même si cela peut sembler contraire à la première. Beaucoup l'ont déjà fait observer dans d'autres commentaires.insertAdjacentHTML
+outerHTML
Avantages:
insertBefore
(pause, même si le nœud existant nom de la variable est de 3 caractères)Inconvénients:
outerHTML
convertit l'élément d'une chaîne de caractères. Nous en avons besoin carinsertAdjacentHTML
ajoute du contenu à partir de chaînes de caractères plutôt que des éléments..insertAdjacentElement()
Si
insertBefore()
(voir MDN) est grand et référencé par la plupart des réponses ici. Pour plus de flexibilité, et pour être un peu plus explicite, vous pouvez utiliser:insertAdjacentElement()
(voir MDN) Cela vous permet de référencer n'importe quel élément, et insérez-la à être déplacé à l'élément exactement où vous le souhaitez:Les autres à envisager pour les mêmes cas d'utilisation:
insertAdjacentHTML()
etinsertAdjacentText()
Références:
https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentElement
https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML
https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentText
node1.after(node2)
produit<node1/><node2/>
,où node1 et node2 sont les nœuds DOM.
.after()
n'est pas pris en charge sur les anciens navigateurs [1], de sorte que vous pourriez avoir besoin pour appliquer un polyfill.Ou vous pouvez tout simplement faire:
insertBefore() est utilisé comme
parentNode.insertBefore()
.Donc, pour imiter et faire une méthode
parentNode.insertAfter()
nous pouvons écrire le code suivant.JavaScript
HTML
Remarque, que l'extension du DOM peut ne pas être la bonne solution pour Vous comme indiqué dans cet article.
Hovewer, cet article a été écrit en 2010, et les choses pourraient être différentes maintenant. Ainsi décider sur Votre propre.
JavaScript DOM insertAfter() la méthode @ jsfiddle.net
Idéalement
insertAfter
devrait fonctionner similaire à insertBefore. Le code ci-dessous effectuera les tâches suivantes:Node
est ajoutéNode
, la nouvelleNode
est ajoutéNode
après la référenceNode
, la nouvelleNode
est ajoutéNode
a un frère ou une sœur d'après, puis le nouveauNode
est inséré, avant que frèreNode
L'extension de
Node
Un exemple courant
Voir le code s'exécutant
JS:
HTML:
Ce code à insérer un lien point à droite après le dernier enfant à inline un petit fichier css
Vous pouvez utiliser
appendChild
fonction pour insérer un élément.Référence: http://www.w3schools.com/jsref/met_node_appendchild.asp
une mise en œuvre robuste de insertAfter.
};
Vous permet de gérer tous les scénarios
Je sais que cette question a beaucoup trop de réponses déjà, mais aucun ne répondait à mes besoins.
Je voulais une fonction qui a l'exact opposé du comportement de
parentNode.insertBefore
- qui est, il faut accepter une valeur nullreferenceNode
(qui le accepté de répondre à ne fonctionne pas) et oùinsertBefore
à insérer à la fin des enfants, celui-ci doit insérer à la commencer, car sinon il n'y aurait pas moyen d'insérer à l'emplacement de départ avec cette fonction à tous; la même raisoninsertBefore
insère à la fin.Depuis null
referenceNode
vous demande de localiser le parent, nous avons besoin de connaître le parent -insertBefore
est une méthode de laparentNode
, de sorte qu'il a accès à la société mère de cette façon, notre fonction n'est pas, donc nous allons avoir besoin de passer le parent en tant que paramètre.La fonction obtenue ressemble à ceci:
Ou (s'il le faut, je ne le recommande pas), vous pouvez bien entendu d'améliorer la
Node
prototype: