Ich habe ein Popup-Plugin, das den HTML-Inhalt eines <div/>
mit der Antwort eines AJAX-Aufrufs setzt.
Jedes Mal, wenn ich das Popup öffne, rufe ich einfach im Code $("#popup").html(response)
an. Dies überschreibt den vorhandenen HTML-Inhalt mit dem neuen Inhalt.
Soll ich $("popup").empty()
aufrufen, bevor ich $("popup").html(response)
anrufe, damit ich den Browserspeicher freigeben kann, der von den Objekten verwendet wurde, die zuvor in $("popup")
div waren? (eventuell Speicherlecks verhindern)
PS: Was ist, wenn ich $("popup")[0].innerHTML = response
anrufe? Soll ich .empty()
Methode aufrufen?
Kurze Antwort Nr.
jQuery.fn.html
verwendet DOMNode.innerHTML =
nach mehreren anderen Dingen. Eine besteht darin, alle gespeicherten Daten auf Knoten zu entfernen (gespeichert über $.fn.data
), siehe Ссылка für die vollständige Quellenübersicht.
.innerHTML
entfernt die untergeordneten Elemente und ersetzt sie durch das neue html. Aber Vorsicht vor Speicherlecks. Ich würde jQuery.fn.empty
vor dem Festlegen von innerHTML verwenden. zB.
Sie würden denken, dass alles in Ordnung ist. Der Knoten ersetzt / entfernt wird jedoch weiterhin in der Variablen a
erfasst und daher nicht zum Garbage Collector geleitet. Ich bin nicht sicher ob oder nicht, dass jQuery DOMNodes intern speichert, bis Sie jQuery.removeData
etc.
JQuery Dokumentation der HTML-Methode sagt:
Wenn .html () zum Festlegen des Inhalts eines Elements verwendet wird, wird jeglicher Inhalt, der in diesem Element enthalten war, vollständig durch den neuen Inhalt ersetzt. Darüber hinaus entfernt jQuery andere Konstrukte wie Daten- und Ereignishandler von untergeordneten Elementen, bevor diese Elemente durch den neuen Inhalt ersetzt werden.
Sie müssen also empty()
nicht aufrufen.
Sie müssen nicht empty()
. html
( response
) Methode ovverides
den vorhandenen Inhalt aufrufen.
Tags und Links javascript jquery performance