Entschuldigung für ein JavaScript-Noob, aber kann jemand bitte erklären, warum es empfohlen wird, .innerHTML
nicht zu verwenden. Wenn wir etwas schneller und einfacher in Form von .innerHTML
haben, warum sollten wir es nicht benutzen?Warum wird empfohlen, .innerHTML zu vermeiden?
Antwort
innerHTML
ist ein Vorschlaghammer. Es wird den Inhalt des ausgewählten DOM-Elements wegblasen und durch das ersetzen, was gerade zugewiesen wird. Dies führt zu einer Reihe von HTML-Escape- und Validierungsproblemen.
Noch wichtiger ist, dass bei Seiten mit einer großen Anzahl von Ereignissen die Verwendung von innerHTML
zum Anhängen eines anderen Elements DOM-Elemente neu generiert, wodurch Ereignisbindungen verloren gehen können.
Es gibt auch einige Probleme in Bezug auf Speicherverluste in älteren Versionen von IE, wenn Elemente aus dem DOM entfernt werden.
Mit all das gesagt ist, ich sage Ihnen nicht, dass Sie nicht innerHTML
verwendet werden soll. Ich benutze es die ganze Zeit in jQuery, wenn ich $(selector).html()
verwende. Manchmal ist ein Vorschlaghammer das richtige Werkzeug für den Job, und wenn Ereignisse richtig delegiert werden, ist es egal, wie viel der Inhalt neu geladen wird.
+1, ich hatte die Leute, die 'element.innerHTML + = ... probierten, fast vergessen, dann merkte man, wie alle Event-Handler/zugehörigen Widgets von den Nachkommen dieses Elements zerstört wurden. –
IIRC Ich erinnere mich an Resig einige Hacks für verschiedene Browser wegen der Disparität in der Leistung von innerHtml. Ich schätze, ein Grund mehr, einen Wrapper zu benutzen. –
+1, ich mag die Vorschlaghammer Analogie. Wenn Sie wissen, wie man innerHTML korrekt verwendet, können Sie viel Zeit sparen ... solange Sie nicht schlau arbeiten müssen. Genau wie der Hammer. – Steve
- 1. Warum wird empfohlen, eine unidirektionale Eins-zu-viele-Verknüpfung auf einem Fremdschlüssel zu vermeiden?
- 2. Warum HibernateTemplate nicht empfohlen wird?
- 3. Warum wird gunicorn_django nicht mehr empfohlen?
- 4. Warum "$(). Ready (handler)" wird nicht empfohlen?
- 5. Warum wird empfohlen, Fragmente nicht mit der Benutzeroberfläche zu behalten?
- 6. Warum innerHtml nicht funktioniert
- 7. Warum wird das Löschen einer Verzweigung in CVS nicht empfohlen?
- 8. Warum kehrt innerHTML 'undefiniert' zurück?
- 9. Warum wird ein Eclipse-Projektordner nicht als Git-Repository empfohlen?
- 10. Warum wird "Hibernate.connection.autocommit = true" in Hibernate nicht empfohlen?
- 11. Warum wird ein führendes Leerzeichen in einer scanf-Formatzeichenfolge empfohlen?
- 12. Warum wird dynamische Echtzeit nicht als Sternchen empfohlen?
- 13. Warum funktioniert dieses .innerHTML nicht?
- 14. Warum wird die Verwendung der Direktive in C++ nicht empfohlen?
- 15. Welcher PyPy Speicherprofiler wird empfohlen?
- 16. Was Importeinstellungen in Datenbank-Projekt empfohlen wird
- 17. Welcher Ansatz wird empfohlen: aggregateRoot.Items.Add (...) oder aggregateRoot.AddItem (...)
- 18. Warum Desinfektion und Flucht werden empfohlen, separat zu tun
- 19. Alternative zu innerHTML-
- 20. Wird empfohlen, JSF 2.0 + Facelets + HTML5/CCS3/JavaScript zu kombinieren?
- 21. Wie wird empfohlen, Hamcrest in Eclipse JUnit zu integrieren?
- 22. Wird empfohlen, in Oracle-Tabellenbereichen einheitliche Extent-Größen zu verwenden?
- 23. Wie wird empfohlen, benutzerdefinierte doppelte Unterstrichvariablen in Python zu verwenden?
- 24. Wird in C++ empfohlen, cstdio, cstring, cmath usw. zu verwenden?
- 25. Wird empfohlen, WPF-Seiten mit kleineren Komponenten zu erstellen?
- 26. Warum wird nicht empfohlen, serverseitige gespeicherte Funktionen in MongoDB zu verwenden?
- 27. Warum wird für emberJs-Modelle empfohlen, die `init`-Methode nicht zu überschreiben
- 28. Warum wird nicht empfohlen, Konstanten in einer separaten Klasse zu speichern?
- 29. Warum wird empfohlen, vor dem Drucken einen Zeiger auf einen generischen Zeiger zu setzen?
- 30. Warum wird empfohlen, den Eigenschaftserfordernissen in Swift-Protokollen die Präfixe statisch voran zu geben?
Wer sagt, dass Sie es nicht verwenden sollten? Und was ist schneller als was? – Steve
'innerHTML' arbeitet auf serialisierten Daten, was nicht die Art ist, wie DOM konzeptuell funktioniert. Es ist relativ einfach, etwas zu vermasseln, wenn man große HTML-Stücke manuell erstellt, was schwieriger zu warten ist. Außerdem ist HTML in JS in den Augen vieler erfahrener JS-Entwickler schrecklich hässlich (und Sie werden sicherlich dasselbe denken, wenn Sie sehen, dass die Hälfte einer JS-Datei HTML mit JavaScript gemischt ist). Aus diesem Grund haben wir JS-Template-Engines und auch das Angular-Framework. Aber ja, Sie können HTML in JS einfügen, ohne Probleme mit der Funktionalität zu haben (speichern Sie einige Fälle mit dem alten IE, wie von @Evan beantwortet). –