Lösung 2018 (Schlechte Praxis, gehen Sie zu 2020)
Ich weiß, dass diese Frage uralt ist, aber für alle zukünftigen Benutzer, hier ist ein modifizierter Prototyp. Dies ist nur ein Polyfill für die Funktion .insertAfter, die nicht existiert. Dieser Prototyp fügt direkt die Funktion HTMLElement.insertAfter(element);
zum HTMLElement-Prototyp:
// Parent
const el = document.body;
// New Element
const newEl = document.createElement("div");
// Custom Method
Element.prototype.insertAfter = function(new) {
this.parentNode.insertBefore(new, this.nextSibling);
}
// Insert Before Element
el.insertBefore(newEl)
// Insert After Element
el.insertAfter(newEl);
// Just remember you cant use .insertAfter() or .insertBefore()
// after either is already called.
// You cant place one element in two places at once.
2019 Lösung (Hässlich / Veraltet, gehen Sie zu 2020)
Verwenden Sie keine Prototypen (wie die Lösung 2018). Das Überschreiben des Prototyps ist sowohl gefährlich als auch von geringer Qualität. Wenn Sie eine neue Methode wünschen, verwenden Sie stattdessen Funktionsüberschreibungen.
Wenn Sie eine sichere Funktion für kommerzielle Projekte wünschen, verwenden Sie einfach eine Standardfunktion. Sie ist nicht so schön, aber sie funktioniert:
// Parent
const el = document.body;
// New Element
const newEl = document.createElement("div");
// Function You Need
function insertAfter(el0, el1) {
el0.parentNode.insertBefore(el1, el0.nextSibling);
}
// Insert Before Element
el.insertBefore(newEl);
// Insert After Element
insertAfter(el, newEl);
// Just remember you cant use insertAfter() or .insertBefore()
// after either is already called.
// You cant place one element in two places at once.
2020 Lösung - ChildNode
Aktuelle Webstandards für ChildNode: MDN Docs - ChildNode
Es befindet sich derzeit in den Living Standards und ist sicher zu verwenden.
Für nicht unterstützte Browser (z.B. IE), verwenden Sie dieses Polyfill: https://github.com/seznam/JAK/blob/master/lib/polyfills/childNode.js
Mir ist klar, dass das Polyfill Proto Overrides verwendet, als ich sagte, dass sie eine schlechte Praxis sind. Sie sind, vor allem, wenn sie blind verwendet werden, wie mit meiner ersten Lösung. Das Polyfill in der MDN-Dokumentation verwendet jedoch eine Form der Initialisierung und Ausführung, die im Vergleich zum einfachen Überschreiben eines Prototyps wesentlich zuverlässiger und sicherer ist.
Wie man ChildNode verwendet:
// Parent
const el = document.body;
// New Element
const newEl = document.createElement("div");
// Insert Before Element
el.before(newEl);
// Insert After Element
el.after(newEl);
// Just remember you cant use .after() or .before()
// after either is already called.
// You cant place one element in two places at once.
// Another feature of ChildNode is the .remove() method,
// which deletes the element from the DOM
el.remove();
newEl.remove();
4 Stimmen
Wenn Sie den Sonderfall des allerletzten untergeordneten Knotens benötigen - stackoverflow.com/questions/5173545/
5 Stimmen
developer.mozilla.org/de-US/docs/Web/API/Element/ o developer.mozilla.org/de-US/docs/Web/API/Element/
4 Stimmen
@AlanLarimer das ist großartig. danke. wissen Sie, wann insertAdjacentElement eingeführt wurde?
1 Stimmen
Laut MDN wird es in IE8 und Firefox 48 (2016 August 08) unterstützt. Folgen Sie der Spur: bugzilla.mozilla.org/show_bug.cgi?id=811259 --> w3.org/Bugs/Public/show_bug.cgi?id=19962 (2016 März 14)