Tut removeChild wirklich das element löschen?
Tut removeChild
Funktion wirklich löschen Sie die Kind-Knoten vollständig? Oder es einfach entfernt das element untergeordnete Element mit dem angegebenen parant Knoten? Wenn es nicht wirklich löscht das element, ist es ein Weg, um das element zu löschen ganz?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
removeChild
Methode einfach entfernt es von seinem übergeordneten Element. Wenn es ein sichtbares element der Seite, wird es von der Seite entfernt werden.Aber Javascript garbage-collection. Dies bedeutet, dass das node-Objekt selbst bleibt bestehen so lange, wie die variable bezieht sich auf es. So können Sie einen Knoten an eine variable verwenden
removeChild
zu 'beschneiden', die es von seinem übergeordneten Knoten, und später einfügen oder Anhängen es zu einem anderen Knoten, dadurch effektiv Sie zu verschieben auf die Seite.Den folgenden code zu entfernen wird ein Knoten, und warten Sie 10 Sekunden, bevor Sie Sie erneut hinzufügen, um den Baum (und somit auf der Seite):
Dies bedeutet, dass das node-Objekt wurde nicht aus dem Speicher gelöscht, denn es gibt noch eine variable verweisen (nämlich
oldNode
).Einem anderen Fall:
Wenn auf der anderen Seite, werden Sie nicht zuweisen der entfernte Knoten zu einer anderen variable, es kann nicht mehr zugegriffen werden (nicht über die Dokument-Baum, da es schon von dort entfernt; und nicht über eine JS-variable); damit wird Javascript automatisch löschen aus dem Speicher:
Zuweisung der entfernte Knoten eine variable, und dann zuweisen von
null
(oder etwas anderes) auf diese variable — wie Marc B schlägt in seiner Antwort — ist völlig unnötig und IMHO albern.Dieser wird komplett löschen Sie die Knoten:
Dies entfernt den Knoten aus dem DOM, so dass es nicht sichtbar ist, aber es speichern, so dass Sie können fügen Sie es an anderer Stelle:
var aChild = document.createElement(...); someNode.appendChild(aChild); ... someNode.removeChild(aChild);
verbleibt Der Knoten durch die Kind-variable Referenz. In diesem Fall müssen Siedelete aChild
um den Auftrag abzuschließen.node.parentElement == null
removeChild
wird nicht vollständig löschen Sie den Knoten.removeChild()
entfernt den Knoten aus dem DOM, und Sie können für die spätere Verwendung speichern (2. Beispiel) oder nicht (1. Beispiel), wie Sie möchten.removeChild entfernt das element aus dem dom, aber es ist auch von der Funktion zurückgegeben wenn du die Entfernung zu re-legen Sie es an anderer Stelle. Sie würde töten müssen, der return-Wert, um wirklich loszuwerden, die entfernt Knoten:
oldNode = 'delete this node please';
scheint nur wie eine Verschwendung von Zeichen.Wollen Sie wirklich löschen eines dom-Elements . removeChild allein ist nicht genug. Dies ist laut Steve Sounders wer ist der Autor von YSlow. Sie verwenden müssen, löschen Sie