To jest bardziej niż FYI niż faktyczna odpowiedź, ale jest również całkiem interesująca.
Z W3C DOM rdzenia opisie (http://www.w3.org/TR/DOM-Level-2-Core/core.html):
Główni DOM API są zaprojektowane kompatybilność z szeroką gamą języków, w tym z językami skryptowymi ogólnego użytkownika oraz z trudniejszymi językami używanymi głównie przez profesjonalnych programistów. W związku z tym interfejsy DOM API muszą działać w oparciu o różnorodne filozofie zarządzania pamięcią, od powiązań językowych, które w żaden sposób nie ujawniają zarządzania pamięcią użytkownikowi, poprzez te (w szczególności Java), które zapewniają jawne konstruktory, ale automatycznie udostępniają mechanizm automatycznego czyszczenia pamięci. odzyskaj nieużywaną pamięć, do tych (zwłaszcza C/C++), które zazwyczaj wymagają od programisty jawnego przydzielenia pamięci obiektu, śledzenia miejsca jej użycia i jawnego uwolnienia go do ponownego użycia. Aby zapewnić spójny interfejs API dla tych platform, DOM nie zajmuje się w ogóle kwestiami zarządzania pamięcią, ale pozostawia je do wdrożenia. Żadne z jawnych powiązań językowych zdefiniowanych przez DOM API (dla ECMAScript i Java) nie wymaga żadnych metod zarządzania pamięcią, ale powiązania DOM dla innych języków (szczególnie C lub C++) mogą wymagać takiej obsługi. Te rozszerzenia będą obowiązkiem tych, którzy dostosowują DOM API do konkretnego języka, a nie do Grupy Roboczej DOM.
Innymi słowy: zarządzanie pamięcią jest pozostawione do implementacji specyfikacji DOM w różnych językach. Będziesz musiał zajrzeć do dokumentacji implementacji DOM w javascript, aby znaleźć jakąkolwiek metodę usunięcia obiektu DOM z pamięci, która nie jest hackerem. (Jest to jednak bardzo niewiele informacji na stronie MDC na ten temat.)
Jako notatkę na
jQuery#remove
i
jQuery#empty
: z tego co mogę powiedzieć, żadna z tych metod nie robi niczego innego niż usunięcie
Object
s od DOM
node
s lub usuwanie DOM
node
s z
document
. Usuwają tylko To oczywiście nie oznacza, że nie ma pamięci przydzielonej do tych obiektów (nawet jeśli nie są one już w stanie
document
).
Edit: Powyższy fragment był zbędny, ponieważ oczywiście jQuery nie może czynić cuda i prace wokół realizacji DOM zastosowanego przeglądarce.
I jeszcze zrobić dla każdego elementu $ (this) .unbind() html ("") usunąć(); – podeig
Myślałem, że jQuery automatycznie usuwa programy obsługi zdarzeń, gdy robisz element.remove(), nie? – jayarjo
@jayarjo - to ma – vsync