Ich verwende AJAX, um Daten an das div-Element anzuhängen, wo ich das div aus JavaScript fülle. Wie kann ich neue Daten an das div anhängen, ohne die vorherigen in div gefundenen Daten zu verlieren?
javascript
Adham
quelle
quelle
Antworten:
Versuche dies:
quelle
div
Elemente mit Ereignis-Listenern oder Eingaben mit vom Benutzer eingegebenem Text enthalten sind. Ich empfehle die Antwort von Chandu .Verwenden von appendChild:
Verwenden von innerHTML: Bei
diesem Ansatz werden alle Listener für die vorhandenen Elemente entfernt, wie von @BiAiB erwähnt. Seien Sie also vorsichtig, wenn Sie diese Version verwenden möchten.
quelle
createTextNode
funktioniert aber nicht, wenn Sie HTML laden. Wenn Sie beispielsweise Listenelemente hinzufügen möchten, funktioniert dies nicht. Das ist ziemlich einschränkend.Vorsicht
innerHTML
, du verlierst etwas, wenn du es benutzt:Ist äquivalent zu:
Dadurch werden alle Knoten in Ihrem Knoten zerstört
div
und neue erstellt. Alle Verweise und Listener auf darin enthaltene Elemente gehen verloren .Wenn Sie sie behalten müssen (z. B. wenn Sie einen Klick-Handler angehängt haben), müssen Sie den neuen Inhalt an die DOM-Funktionen anhängen (appendChild, insertAfter, insertBefore):
quelle
appendChild
wurde von @Cybernatedocument.createTextNode()
.Wenn Sie es schnell machen und keine Referenzen und Listener verlieren möchten, verwenden Sie: .insertAdjacentHTML () ;
" Das Element, für das es verwendet wird, wird nicht erneut analysiert, und die vorhandenen Elemente im Element werden nicht beschädigt . Dies und die Vermeidung des zusätzlichen Serialisierungsschritts machen es viel schneller als die direkte Manipulation von innerHTML."
Unterstützt von allen Hauptbrowsern (IE6 +, FF8 +, Alle anderen und Mobilgeräte): http://caniuse.com/#feat=insertadjacenthtml
Beispiel aus https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML
quelle
insertAdjacentElement()
undinsertAdjacentText()
.Wenn Sie jQuery verwenden, können Sie es verwenden,
$('#mydiv').append('html content')
und der vorhandene Inhalt bleibt erhalten.http://api.jquery.com/append/
quelle
Auch das wird funktionieren:
quelle
IE9 + (Vista +) Lösung, ohne neue Textknoten zu erstellen:
Dies war jedoch nicht ganz der Trick für mich, da ich nach jeder Nachricht eine neue Zeile benötigte, sodass mein DIV mit diesem Code zu einem gestalteten UL wurde:
Von https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent :
quelle
Sie können jQuery verwenden. das macht es sehr einfach.
Laden Sie einfach die jQuery-Datei herunter und fügen Sie jQuery in Ihren HTML-Code ein,
oder Sie können den Online-Link verwenden:
und versuchen Sie dies:
quelle
Die folgende Methode ist weniger allgemein als andere. Sie ist jedoch hilfreich, wenn Sie sicher sind, dass Ihr letzter untergeordneter Knoten des div bereits ein Textknoten ist. Auf diese Weise erstellen Sie keinen neuen Textknoten mit
appendData
MDN Reference AppendDataquelle
Warum nicht einfach setAttribute verwenden?
Dann können Sie diese Daten erhalten von:
quelle
Java-Skript
jquery
Verwenden Sie
.html()
ohne Argumente, um zu sehen, dass Sie eingegeben haben. Sie können die Browserkonsole verwenden, um diese Funktionen schnell zu testen, bevor Sie sie in Ihrem Code verwenden.quelle