Ho un'applicazione che consente a un utente di visualizzare i dettagli su un caso specifico senza un postback. Ogni volta che un utente richiede dati dal server, tiro giù il seguente markup.Come eliminare elementi DOM in JavaScript per evitare perdite di memoria
<form name="frmAJAX" method="post" action="Default.aspx?id=123456" id="frmAJAX">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" />
</div>
<div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" />
</div>
<div id="inner">
<!-- valid info here --!>
</div>
</form>
successivo prendo quanto sopra e InnerHtml a un nuovo elemento DOM in questo modo:
success: function(xhtml) {
var tr = document.createElement('tr');
var td = document.createElement('td');
var container = document.createElement('div');
obj.parentNode.parentNode.parentNode.insertBefore(tr, obj.parentNode.parentNode.nextSibling);
td.appendChild(container);
container.innerHTML = xhtml;
tr.appendChild(td);
ma dopo quanto sopra, io uso un po 'di jQuery per rimuovere il brutto aspnet spazzatura
$('form:eq(1)').children().each(
function() {
if ($('form:eq(1)').find('div').filter(function() { return $(this).attr('id') == ''; }).remove());
}
);
//Capture the remaining children
var children = $('form:eq(1)').children();
// Remove the form
$('form:eq(1)').remove();
// append the correct child element back to the DOM
parentObj.append(children);
La mia domanda è questa: quando si utilizza IESieve non noto perdite effettive ma un numero sempre crescente di elementi DOM (quindi utilizzo della memoria).
Cosa posso migliorare nel lato client per pulire effettivamente questo pasticcio? Nota: entrambi IE7/8 mostrano questi risultati.
EDIT: Ho finalmente ottenuto questo funzionamento e ho deciso di scrivere un breve blog post con il codice sorgente completo.
Si dovrebbe davvero accettare una risposta a questa domanda ora .... – Blazemonger
Puoi aggiornare URL a blog post? – Christian
@Christian ha appena fatto (mi dispiace per il collegamento interrotto) –