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)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unter der Annahme, dass
htmlhttp.responseText
ist ein Knoten:Wenn Sie nur einen HTML-string an (was wahrscheinlich erscheint), dann:
Auf der anderen Seite, wenn Sie anfügen müssen neue Elemente aus einem string:
Referenzen:
- Knoten.appendChild()
.appendChild()
wiederholt, oder wickeln Sie Sie in einem Knoten und fügen Sie das - Knoten. Ohne zu sehen (ein Beispiel), was Sie in Ihrerxmlhttp.responseText
variable es ist sehr schwer zu beantworten, speziell zu Ihrem Anwendungsfall.htmlhttp.responseText
ist wahrscheinlich ein string.newElement.parentNode!=undefined
vornewElement.parentNode.removeChild(newElement);
, es war mirKönnten Sie
- Element.insertAdjacentHTML()
.Ich denke, Sie tun würde,