InnerHTML Anhängen, anstatt Sie zu ersetzen

Ich bin mit diesem code zu aktualisieren div mit einem AJAX-request

var xmlhttp;
if (window.XMLHttpRequest) { //code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
} else { //code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.getElementById("some_id").innerHTML += xmlhttp.responseText;
    }
}
xmlhttp.open("GET", "http://example.com/");
xmlhttp.setRequestHeader('Content-Type', 'utf8');
xmlhttp.send();

Funktioniert alles einwandfrei, das problem ist, dass, wenn die div mit id some_id hat eine Menge von Inhalten in es ich den Inhalt sehen kann verschwinden, und dann erscheinen aktualisiert, nachdem der AJAX-request ausgeführt wurde.

Ich denke, dass es ist, weil

document.getElementById("some_id").innerHTML += xmlhttp.responseText;

Ist das löschen und ersetzen der innerHTML des div mit der vorherigen innerHTML plus den neuen Inhalten, was eine previous content → blank → updated content Verhalten.

Ist es ein Weg, um Anhängen den neuen Inhalt der div anstatt Sie zu ersetzen Ihren gesamten Inhalt mit dem neuen?

  • sind Sie mit jquery oder native javascript?
  • versuchen Sie, fügen Sie untergeordnete element, anstatt Sie zu ersetzen die gesamte html
  • Ich bin mit beiden, aber eine Reine javascript-Lösung wäre für mich besser
  • theoretisch sollten Sie nie sehen, das flimmern, da das rendering wird nur durchgeführt, nachdem das Skript callback endet. Haben Sie besonders kompliziert ist HTML?
  • wenn Sie mit jQuery sind, sollten Sie nie verwenden innerHTML direkt, denn es wird nicht entfernen Sie den Ereignis-Handler. Verwenden Sie die jQuery - .html option statt, oder Sie bekommen massive memory leaks (ja, Sie existieren in JavaScript)
  • Ja, es ist eine joomla-Website und die Vorlage hat eine Menge von verschachtelten divs
  • Klingt wie Sie machen vielleicht die rendering-engine cry. Versuchen Sie, begrenzen Sie die Menge an code, die auf der Seite auf einmal. Einige Websites, die Inhalte austauschen, die oberhalb/unterhalb des viewport mit großen, leeren divs aus diesem Grund (unter dem eigentlichen Inhalt lebendig als DOM bekannt ist, nur der JavaScript. d.h. nicht innerhalb des Dokuments enthalten)

InformationsquelleAutor BackSlash | 2013-08-30
Schreibe einen Kommentar