Wenn Sie ein Element mit Standard-JavaScript entfernen, müssen Sie zuerst zu seinem übergeordneten Element wechseln:
var element = document.getElementById("element-id");
element.parentNode.removeChild(element);
Es scheint mir etwas seltsam, zuerst zum übergeordneten Knoten gehen zu müssen. Gibt es einen Grund, warum JavaScript so funktioniert?
javascript
Zaz
quelle
quelle
element.remove()
direkt ab ES5 verwenden. Du brauchst die Eltern nicht!Antworten:
Ich weiß, dass das Erweitern nativer DOM-Funktionen nicht immer die beste oder beliebteste Lösung ist, aber dies funktioniert gut für moderne Browser.
Und dann können Sie solche Elemente entfernen
oder
Hinweis: Diese Lösung funktioniert nicht für IE 7 und niedriger. Weitere Informationen zum Erweitern des DOM finden Sie in diesem Artikel .
EDIT : Überprüfung meiner Antwort im Jahr 2019,
node.remove()
ist zur Rettung gekommen und kann wie folgt verwendet werden (ohne die Polyfill oben):oder
Diese Funktionen sind in allen modernen Browsern (nicht im Internet Explorer) verfügbar. Lesen Sie mehr über MDN .
quelle
NodeList
oderHTMLCollection
welche Array-ähnliche Reihe von Elementen. Die zweite Methodendefinition ermöglicht das Entfernen dieser "Elementsätze".document.getElementsByClassName("my-elements").remove();
. Bearbeiten: Tatsächlich wird ein Haufen gelöscht, es muss jedoch erneut ausgeführt werden, um den Vorgang abzuschließen. Versuchen Sie es auf dieser Seite mit der Klasse "Kommentar-Kopie".Crossbrowser und IE> = 11:
quelle
$.ready
Alternative zunoscript
Tags zu finden, die schneller als js ist . Um es so zu verwenden, wie ich es wollte, musste ich es in eine 1-ms-setTimeout
Funktion einwickeln . Dies löst alle meine Probleme auf einmal. Gracias.outerHTML
ist immer noch eine neue (er) Ergänzung zum Standard. Wenn Sie zum Zeitpunkt des Schreibens Unterstützung für Software> 6 suchen, benötigen Sie eine andere Lösung. Dieremove
von anderen erwähnte Funktion ist ein ähnlicher Fall. Wie üblich ist es sicher, eine Polyfüllung zu implementieren.delete element
tut nichts, da Sie keine Variablen in JS löschen können, nur Schlüssel;) Überprüfen Sie selbst,console.log(element)
delete element
removeChild
(ca. 6-7% auf meinem System). Siehe jsperf.com/clear-outerhtml-v-removechild/2Sie könnten eine
remove
Funktion erstellen, damit Sie nicht jedes Mal darüber nachdenken müssen:quelle
elem
zuremove.elem
. Auf diese Weise verweist die Funktion auf sich selbst, sodass Sie keine weitere globale Variable erstellen müssen. :-)function remove(id) { document.getElementById(id).parentNote.removeChild(document.getElementById(id)); }
Das unterstützt das DOM . Durchsuchen Sie diese Seite nach "entfernen" oder "löschen" und removeChild ist die einzige, die einen Knoten entfernt.
quelle
element.remove();
wird funktionieren. Vielleicht ist es etwas Neues. Aber zum ersten Mal für mich und es funktioniert. Ich denke, es hätte immer funktionieren sollen, da es sehr einfach ist.Das DOM ist in einem Knotenbaum organisiert, in dem jeder Knoten einen Wert sowie eine Liste von Verweisen auf seine untergeordneten Knoten hat. Damit
element.parentNode.removeChild(element)
ahmt genau das, was intern passiert: Zuerst gehen Sie das die übergeordnete Knoten, dann den Verweis auf den untergeordneten Knoten entfernen.Ab DOM4 steht eine Hilfsfunktion zur Verfügung, um dasselbe zu tun :
element.remove()
. Dies funktioniert in 87% der Browser (Stand 2016), jedoch nicht in IE 11. Wenn Sie ältere Browser unterstützen müssen, können Sie:quelle
Zum Entfernen eines Elements:
Zum Entfernen aller Elemente mit beispielsweise einem bestimmten Klassennamen:
quelle
if(list[i] && list[i].parentElement)
Leitung notwendig? Wird die Existenz jedes Elements nicht durch die Tatsache garantiert, dass es von dergetElementsByClassName
Methode zurückgegeben wurde?document.getElementsByClassName(...
Sie können nur verwenden
element.remove()
quelle
element.remove()
ist kein gültiges JavaScript und funktioniert nur in bestimmten Browsern wie Chrome .element.remove()
ist gültiges JavaScript mit DOM4 und funktioniert in allen modernen Browsern, natürlich mit Ausnahme von Internet Explorer.Die
ChildNode.remove()
Methode entfernt das Objekt aus dem Baum, zu dem es gehört.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Hier ist eine Geige, die zeigt, wie Sie anrufen können
document.getElementById('my-id').remove()
https://jsfiddle.net/52kp584L/
** **.
NodeList muss nicht erweitert werden. Es wurde bereits implementiert.
** **.
quelle
Sie können dieses Element mithilfe
remove()
der DOM-Methode direkt entfernen .Hier ist ein Beispiel:
quelle
Nach DOM Level 4 Spezifikationen, die die aktuelle Version in der Entwicklung ist, gibt es einige neue handliche Mutationsverfahren zur Verfügung:
append()
,prepend()
,before()
,after()
,replace()
, undremove()
.https://catalin.red/removing-an-element-with-plain-javascript-remove-method/
quelle
Der Funktionsname lautet
removeChild()
und wie kann das Kind entfernt werden, wenn kein Elternteil vorhanden ist? :) :)Andererseits müssen Sie es nicht immer so nennen, wie Sie es gezeigt haben.
element.parentNode
ist nur ein Helfer, um den übergeordneten Knoten des angegebenen Knotens abzurufen. Wenn Sie den übergeordneten Knoten bereits kennen, können Sie ihn einfach folgendermaßen verwenden:Ex:
https://developer.mozilla.org/en-US/docs/Web/API/Node/removeChild
================================================== =======
Um noch etwas hinzuzufügen:
Einige Antworten haben darauf hingewiesen, dass Sie anstelle von verwenden
parentNode.removeChild(child);
könnenelem.remove();
. Aber wie ich bemerkt habe, gibt es einen Unterschied zwischen den beiden Funktionen, und er wird in diesen Antworten nicht erwähnt.Wenn Sie verwenden
removeChild()
, wird ein Verweis auf den entfernten Knoten zurückgegeben.Wenn Sie jedoch verwenden
elem.remove();
, wird die Referenz nicht zurückgegeben.https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove
Dieses Verhalten kann in Chrome und FF beobachtet werden. Ich glaube, es lohnt sich zu bemerken :)
Hoffe, meine Antwort fügt der Frage etwas Wert hinzu und wird hilfreich sein !!
quelle
Funktionen, die ele.parentNode.removeChild (ele) verwenden, funktionieren nicht für Elemente, die Sie erstellt, aber noch nicht in den HTML-Code eingefügt haben. Bibliotheken wie jQuery und Prototype verwenden mit Bedacht eine Methode wie die folgende, um diese Einschränkung zu umgehen.
Ich denke, JavaScript funktioniert so, weil die ursprünglichen Designer des DOM Eltern / Kind und vorherige / nächste Navigation als höhere Priorität angesehen haben als die heute so beliebten DHTML-Modifikationen. Mitte der 90er Jahre war es nützlich, von einem <input type = 'text'> lesen und nach relativer Position im DOM in einen anderen schreiben zu können. Damals war die dynamische Generierung ganzer HTML-Formulare oder interaktiver GUI-Elemente kaum ein Kinderspiel das Auge eines Entwicklers.
quelle
IMHO: Der Grund dafür ist der gleiche wie in anderen Umgebungen: Sie führen eine Aktion aus, die auf Ihrem "Link" zu etwas basiert. Sie können es nicht löschen, während Sie damit verbunden sind.
Als würde man einen Ast schneiden. Setzen Sie sich beim Schneiden auf die Seite, die dem Baum am nächsten liegt, sonst ist das Ergebnis ... unglücklich (obwohl lustig).
quelle
Dieser kommt tatsächlich von FireFox ... ausnahmsweise war IE dem Rudel voraus und erlaubte das direkte Entfernen eines Elements.
Dies ist nur meine Annahme, aber ich glaube, der Grund, warum Sie ein Kind über das Elternteil entfernen müssen, liegt in einem Problem mit der Art und Weise, wie FireFox mit der Referenz umgegangen ist.
Wenn Sie ein Objekt aufrufen, um Hari-Kari direkt festzuschreiben, behalten Sie diesen Verweis unmittelbar nach seinem Tod immer noch bei. Dies kann zu mehreren bösen Fehlern führen, z. B. wenn sie nicht entfernt werden, entfernt werden, aber Verweise darauf beibehalten werden, die als gültig erscheinen, oder einfach ein Speicherverlust.
Ich glaube, als sie das Problem erkannten, bestand die Problemumgehung darin, ein Element über das übergeordnete Element zu entfernen, da Sie jetzt, wenn das Element nicht mehr vorhanden ist, einfach einen Verweis auf das übergeordnete Element haben. Dies würde all diese Unannehmlichkeiten stoppen und (wenn zum Beispiel ein Baum Knoten für Knoten geschlossen wird) ziemlich gut "zip-up".
Es sollte ein leicht zu behebender Fehler sein, aber wie bei vielen anderen Dingen in der Webprogrammierung war die Veröffentlichung wahrscheinlich überstürzt, was dazu führte ... und als die nächste Version auf den Markt kam, verwendeten genug Leute sie, um dies zu ändern eine Menge Code zu brechen.
Auch dies alles ist einfach meine Vermutung.
Ich freue mich jedoch auf den Tag, an dem die Webprogrammierung endlich einen vollständigen Frühjahrsputz erhält, all diese seltsamen kleinen Eigenheiten aufgeräumt werden und alle nach den gleichen Regeln spielen.
Wahrscheinlich am Tag nachdem mein Roboterdiener mich wegen rückständiger Löhne verklagt hat.
quelle
removeChild
ist eine Methode der DOM Level 1-Node
Schnittstelle .Soweit ich weiß, funktioniert das direkte Entfernen eines Knotens in Firefox nicht, sondern nur in Internet Explorer. Um Firefox zu unterstützen, müssen Sie zum übergeordneten Element gehen, um das untergeordnete Element zu entfernen.
Ref: http://chiragrdarji.wordpress.com/2007/03/16/removedelete-element-from-page-using-javascript-working-in-firefoxieopera/
quelle
quelle
Dies ist die beste Funktion, um ein Element ohne Skriptfehler zu entfernen:
Hinweis an
EObj=document.getElementById(EId)
.Dies ist EIN Gleichheitszeichen nicht
==
.Wenn ein Element
EId
vorhanden ist, wird es von der Funktion entfernt, andernfalls wird false zurückgegeben, nichterror
.quelle