2013-06-03 10 views
8

Mam wyskakującą wtyczkę, która ustawia treść html na <div/> z odpowiedzią wywołania AJAX.Czy konieczne jest wywołanie metody empty() przed html() lub innerHTML?

Za każdym razem, gdy otwierasz wyskakujące okienko, w kodzie i po prostu zadzwonię pod numer $("#popup").html(response). Powoduje to zastąpienie istniejącej treści html nową treścią.

Czy mogę zadzwonić pod numer $("popup").empty(), zanim zadzwonię pod numer $("popup").html(response), aby zwolnić pamięć przeglądarki używaną przez obiekty, które wcześniej znajdowały się w jednostce div $("popup")? (ostatecznie zapobiega wyciekom pamięci)

PS: co jeśli zadzwonię pod numer $("popup")[0].innerHTML = response? powinienem zadzwonić pod metodę .empty()?

+0

http://stackoverflow.com/questions/8567957/is-empty-enough-for-big-ajaxy-apps?rq=1 –

Odpowiedz

7

Krótka odpowiedź nr.

jQuery.fn.html używa DOMNode.innerHTML = po wykonaniu kilku innych czynności. Jedną z nich jest usunięcie wszelkich przechowywanych danych na węzłach (przechowywanych za pośrednictwem $.fn.data), patrz http://james.padolsey.com/jquery/#v=git&fn=jQuery.fn.html, aby uzyskać pełny przegląd źródeł.

.innerHTML usuwa dzieci i zastępuje je nowym html. Ale uważaj na wycieki pamięci. Przed ustawieniem innerHTML użyłbym jQuery.fn.empty. na przykład.

var a = document.createElement('div'), 
    b = document.createElement('div'); 

    b.appendChild(a); 

    b.innerHTML = 'new innerHMTL'. 

Można by pomyśleć, że wszystko jest w porządku. Ale węzeł zamieniony/usunięty jest nadal przechwytywany w zmiennej a i dlatego nie jest rzucany do kosza. Nie jestem pewien, czy nie pogoda, że ​​jQuery sklepy DOMNodes wewnętrzny aż zadzwonisz jQuery.removeData itp

1

Nie trzeba dzwonić pod numer empty(). html (response) metoda ovverides the existing content.

4

JQuery dokumentacji metody html mówi:

Kiedy .html() służy do ustawiania zawartości danego elementu, każdą treść, która była w tym elemencie jest całkowicie zastąpiona nową treścią. Ponadto jQuery usuwa inne konstrukcje, takie jak moduły obsługi danych i zdarzeń z elementów potomnych, przed zastąpieniem tych elementów nową treścią.

Nie musisz dzwonić pod numer empty().

Powiązane problemy