Wenn ich eine Zeitspanne habe, sagen Sie:
<span id="myspan"> hereismytext </span>
Wie verwende ich JavaScript, um "hereismytext" in "newtext" zu ändern?
javascript
html
user105033
quelle
quelle
textContent
stattdessen zu verwenden , sodass neue Personen dazu ermutigt werden, geeignete und sichere Methoden anzuwenden?Die Verwendung von innerHTML wird daher NICHT EMPFOHLEN . Stattdessen sollten Sie einen textNode erstellen. Auf diese Weise "binden" Sie Ihren Text und sind zumindest in diesem Fall nicht anfällig für einen XSS-Angriff.
Der richtige Weg:
Weitere Informationen zu dieser Sicherheitsanfälligkeit: Cross Site Scripting (XSS) - OWASP
Bearbeitet am 4. November 2017:
Die dritte Codezeile wurde gemäß dem Vorschlag von @mumush geändert : "Verwenden Sie stattdessen appendChild ();".
Übrigens, laut @Jimbo Jonny sollte alles als Benutzereingabe behandelt werden, indem das Prinzip "Sicherheit nach Ebenen" angewendet wird . Auf diese Weise werden Sie keine Überraschungen erleben.
quelle
innerHTML
erfordern Vorsicht, beachten Sie, dass Ihre Lösung verwendet ,innerText
die nicht in Firefox unterstützt wird. quirksmode.org/dom/html Es wird auch verwendet,textContent
was in IE8 nicht unterstützt wird. Sie können Code strukturieren, um diese Probleme zu umgehen.span.appendChild(txt);
stattdessen!innerHTML
die nicht empfohlen wird, lächerlich. Ganz zu schweigen davon, dass es nach der Desinfektion immer noch in Ordnung ist. Die Idee, dass man Benutzereingaben bereinigen sollte, hängt SO NICHT mit dieser spezifischen Frage zusammen. Am Ende verdient es höchstens eine kleine Anmerkung mit der Aufschrift "Übrigens: Wenn es sich um Benutzereingaben handelt, stellen Sie sicher, dass Sie zuerst bereinigen oder die X-Methode verwenden, die sie nicht benötigt" .span.innerHTML = "";
dann appendChild?quelle
EDIT: Dies wurde im Jahr 2014 geschrieben. Sie interessieren sich wahrscheinlich nicht mehr für IE8 und können die Verwendung vergessen
innerText
. Einfach benutzentextContent
und fertig, Hurra.Wenn Sie derjenige sind, der den Text liefert, und kein Teil des Textes vom Benutzer (oder einer anderen Quelle, die Sie nicht kontrollieren) geliefert wird, ist die Einstellung
innerHTML
möglicherweise akzeptabel:Wenn Sie jedoch nicht die Quelle für einen Teil der Textzeichenfolge sind,
innerHTML
kann die Verwendung von, wie andere bemerken, zu Angriffen durch Inhaltsinjektion wie XSS führen, wenn Sie nicht zuerst darauf achten, den Text ordnungsgemäß zu bereinigen.Wenn Sie Eingaben des Benutzers verwenden, haben Sie folgende Möglichkeiten, dies sicher zu tun und gleichzeitig die browserübergreifende Kompatibilität aufrechtzuerhalten:
Firefox unterstützt nicht
innerText
und IE8 unterstützt nicht,textContent
daher müssen Sie beide verwenden, wenn Sie die browserübergreifende Kompatibilität beibehalten möchten.Und wenn Sie Rückflüsse (verursacht durch
innerText
) nach Möglichkeit vermeiden möchten :quelle
Ich benutze
Jquery
und keiner der oben genannten hat geholfen, ich weiß nicht warum, aber das hat funktioniert:quelle
Hier ist ein anderer Weg:
Die innerText-Eigenschaft wird von Safari, Google Chrome und MSIE erkannt. Für Firefox war die Standardmethode die Verwendung von textContent, aber seit Version 45 hat es auch eine innerText-Eigenschaft, wie mich kürzlich jemand freundlicherweise bestätigt hat. Diese Lösung testet, ob ein Browser eine dieser Eigenschaften unterstützt, und weist in diesem Fall den "neuen Text" zu.
Live-Demo: hier
quelle
Neben dem reinen Javascript Antworten oben, Sie jQuery verwenden können Text Methode , wie folgend:
Wenn Sie die Antwort erweitern müssen, um den HTML- Inhalt eines span- oder div-Elements abzurufen / zu ändern , können Sie Folgendes tun:
Verweise:
.text (): http://api.jquery.com/text/
.html (): http://api.jquery.com/html/
quelle
Sie können auch die querySelector () -Methode verwenden, vorausgesetzt, die 'myspan'-ID ist eindeutig, da die Methode das erste Element mit dem angegebenen Selektor zurückgibt:
developer.mozilla
quelle
Wie in anderen Antworten werden innerHTML und innerText nicht empfohlen. Verwenden Sie besser textContent . Dieses Attribut wird gut unterstützt. Sie können dies überprüfen: http://caniuse.com/#search=textContent
quelle
Dadurch wird der Dom-Knoten mit der ID ausgewählt
myspan
und der Textinhalt in geändertnew text
quelle
Du kannst tun
quelle
Für diese Zeitspanne
Sie können so gehen: -
quelle