Löscht removeChild wirklich das Element?

7

Löscht die removeChild -Funktion den untergeordneten Knoten wirklich vollständig? Oder es entfernt nur das Element Kind des angegebenen Parant-Knotens? Wenn das Element nicht wirklich gelöscht wird, gibt es eine Möglichkeit, das Element vollständig zu löschen?

    
Yunus Eren Güzel 04.03.2011, 14:19
quelle

4 Antworten

14

Die Methode removeChild entfernt sie einfach von ihrem übergeordneten Element. Wenn es ein sichtbares Element der Seite ist, wird es von der Seite entfernt.

Aber Javascript hat Müllsammlung. Dies bedeutet, dass das Knotenobjekt selbst bestehen bleibt, solange sich eine Variable darauf bezieht. Sie können also einer Variablen einen Knoten zuweisen, removeChild verwenden, um sie von ihrem übergeordneten Knoten zu entfernen, und später einfügen oder an einen anderen Knoten anhängen, wodurch sie effektiv auf der Seite verschoben wird.

Der folgende Code entfernt einen Knoten und wartet 10 Sekunden, bevor er erneut zum Baum (und damit zur Seite) hinzugefügt wird:

%Vor%

Dies bedeutet, dass das Knotenobjekt nicht aus dem Speicher gelöscht wurde, weil immer noch eine Variable darauf zeigt (nämlich oldNode ).

Ein anderer Fall:

%Vor%

Wenn Sie andererseits den entfernten Knoten nicht einer anderen Variablen zuweisen, kann nicht mehr darauf zugegriffen werden (nicht über den Dokumentenbaum, da er von dort entfernt wurde; und nicht über eine JS-Variable); So wird Javascript automatisch aus dem Speicher gelöscht:

%Vor%

Den entfernten Knoten einer Variablen zuweisen und dann null (oder irgendetwas anderes) dieser Variable zuweisen - wie Marc B in seiner Antwort vorschlägt - ist völlig unnötig und, IMHO, dumm.

    
Martijn 04.03.2011, 15:04
quelle
10

Dies wird den Knoten vollständig löschen:

%Vor%

Dadurch wird der Knoten aus dem DOM entfernt, so dass er nicht sichtbar ist, aber er wird gespeichert, so dass Sie ihn an anderer Stelle einfügen können:

%Vor%     
awm 04.03.2011 14:32
quelle
1

removeChild entfernt das Element aus dem dom, aber es wird auch von der Funktion zurückgegeben, falls Sie das Entfernen durchführen, um es an einer anderen Stelle einzufügen. Sie müssten diesen Rückgabewert töten, um den entfernten Knoten wirklich loszuwerden:

%Vor%     
Marc B 04.03.2011 14:22
quelle
1

Wenn Sie ein dom-Element wirklich löschen möchten. removeChild alleine ist nicht genug. Dies ist laut Steve Sounders der Autor von YSlow. Sie müssen löschen

verwenden     
Arun George 09.11.2011 05:31
quelle

Tags und Links