So hängen Sie diese HTML-Zeichenfolge an
var str = '<p>Just some <span>text</span> here</p>';
zum DIV mit der ID, 'test'
die sich im DOM befindet?
(Übrigens div.innerHTML += str;
ist nicht akzeptabel.)
javascript
html
dom
browser
Šime Vidas
quelle
quelle
innerHTML
Setzt die Zeichenfolge in das Element (ersetzt alle untergeordneten Elemente), währendinsertAdjacentHTML
sie (1) vor dem Element, (2) nach dem Element, (3) innerhalb des Elements vor dem ersten untergeordneten Element oder (4) platziert wird. innerhalb des Elements nach dem letzten Kind.insertAdjacentHTML
ist schneller als das Anhängen aninnerHTML
, dainsertAdjacentHTML
die vorhandenen untergeordneten Elemente des Elements nicht serialisiert und analysiert werden.insertAdjacentHTML
auch die Werte geänderter Formularelemente bei, während das Anhängen aninnerHTML
das Element neu erstellt wird und der gesamte Formularkontext verloren geht.Ist das akzeptabel?
jsFiddle .
Aber , Neil Antwort ist eine bessere Lösung.
quelle
innerHTML
?insertAdjacentHTML
.Performance
AppendChild
(E) ist mehr als 2x schneller als andere Lösungen auf Chrom und Safari,insertAdjacentHTML
(F) ist auf Firefox am schnellsten. DasinnerHTML=
(B) (nicht mit+=
(A) verwechseln ) ist die zweitschnelle Lösung in allen Browsern und viel praktischer als E und F.Einzelheiten
Einrichtungsumgebung (2019.07.10) MacOs High Sierra 10.13.4 auf Chrome 75.0.3770 (64-Bit), Safari 11.1.0 (13604.5.6), Firefox 67.0.0 (64-Bit)
Sie können Test in Ihrem Gerät abspielen hier
Code-Snippet anzeigen
quelle
Die Idee ist,
innerHTML
ein Zwischenelement zu verwenden und dann alle untergeordneten Knoten an die Stelle zu verschieben, über die Sie sie wirklich möchtenappendChild
.Auf diese Weise wird vermieden, dass Ereignishandler gelöscht werden
div#test
, Sie können jedoch eine HTML-Zeichenfolge anhängen.quelle
Der richtige Weg ist mit
insertAdjacentHTML
. In Firefox vor 8 können Sie auf die Verwendung zurückgreifen,Range.createContextualFragment
wenn Ihrestr
keinescript
Tags enthält .Wenn Ihr Tag Tags
str
enthältscript
, müssen Siescript
Elemente aus dem von zurückgegebenen Fragment entfernen,createContextualFragment
bevor Sie das Fragment einfügen. Andernfalls werden die Skripte ausgeführt. (insertAdjacentHTML
Markiert Skripte als nicht ausführbar.)quelle
createContextualFragment
. Ich habe nach einer Möglichkeit gesucht, einige HTML-Includes mit Skripten nur dann auszuführen, wenn der Benutzer dem Setzen eines Cookies zustimmt.Schneller Hack :
Anwendungsfälle :
1: Als HTML-Datei speichern und in Chrome, Firefox oder Edge ausführen. (IE wird nicht funktionieren)
2: Verwenden Sie in http://js.do
In Aktion: http://js.do/HeavyMetalCookies/quick_hack
Aufgeschlüsselt mit Kommentaren:
Grund warum ich gepostet habe:
JS.do hat zwei Must-Haves:
Zeigt jedoch keine console.log-Nachrichten an. Kam hierher auf der Suche nach einer schnellen Lösung. Ich möchte nur die Ergebnisse einiger Zeilen Scratchpad-Code sehen, die anderen Lösungen sind zu viel Arbeit.
quelle
Warum ist das nicht akzeptabel?
document.getElementById('test').innerHTML += str
wäre das Lehrbuch, wie man es macht.
quelle
#test
. Das ist im Allgemeinen nicht wünschenswert.Dies kann lösen
quelle
InnerHTML löscht alle Daten wie Ereignisse für vorhandene Knoten
Kind mit firstChild anhängen fügt innerHTML nur das erste Kind hinzu. Zum Beispiel, wenn wir anhängen müssen:
Es wird nur Text1 angezeigt
Was ist damit:
Fügt innerHTML ein spezielles Tag hinzu, indem Sie ein Kind anhängen, und bearbeiten Sie dann OuterHTML, indem Sie das von uns erstellte Tag löschen. Ich weiß nicht, wie schlau es ist, aber es funktioniert für mich, oder Sie können OuterHTML in InnerHTML ändern, sodass keine Funktion zum Ersetzen verwendet werden muss
quelle
Kürzeste - 18 Zeichen (nicht zu verwechseln
+=
(Erwähnung durch OP) mit=
weiteren Details hier )Code-Snippet anzeigen
quelle