Wenn ich eine habe Spannesagen:
<span id="myspan"> hereismytext </span>
Wie verwende ich JavaScript, um “hereismytext” in “newtext” zu ändern?
Benutzer105033
Wenn ich eine habe Spannesagen:
<span id="myspan"> hereismytext </span>
Wie verwende ich JavaScript, um “hereismytext” in “newtext” zu ändern?
Gregor
Für moderne Browser sollten Sie verwenden:
document.getElementById("myspan").textContent="newtext";
Während ältere Browser es möglicherweise nicht wissen textContent
es wird nicht empfohlen zu verwenden innerHTML
da es eine XSS-Schwachstelle einführt, wenn der neue Text eine Benutzereingabe ist (siehe andere Antworten unten für eine detailliertere Diskussion):
//POSSIBLY INSECURE IF NEWTEXT BECOMES A VARIABLE!!
document.getElementById("myspan").innerHTML="newtext";
@bouncingHippo document.getElementById(“myspan”).setAttribute(“style”,”cssvalues”);
– Gregor
11. September 2012 um 6:44 Uhr
Es sollte eine Möglichkeit geben, diese beiden Antworten zu einer zusammenzuführen. es ist genau die gleiche Antwort.
– John-Jones
18. Februar 2014 um 11:47 Uhr
Dies setzt nicht die Textes setzt die HTML was grundsätzlich anders ist.
– Brad
11. Oktober 2014 um 2:05 Uhr
@gregoire – Wie andere bereits darauf hingewiesen haben, ist Ihre Antwort anfällig für XSS. Diese Frage wurde bereits etwa 80.000 Mal angesehen, was bedeutet, dass viele Leute diese Lösung wahrscheinlich übernommen haben und möglicherweise unnötige xss-Lecks eingeführt haben. Könnten Sie erwägen, Ihre Antwort zu aktualisieren, um sie zu verwenden textContent
stattdessen so, dass neue Leute ermutigt werden, angemessene und sichere Methoden zu verwenden?
– Tiddo
20. Januar 2015 um 21:59 Uhr
@Tiddo textContent wird in IE8 und darunter nicht unterstützt und ich hoffe für Sie, dass Sie niemals direkt nicht bereinigte Benutzereingaben in Ihrem Skript verwenden.
– Gregor
21. Januar 2015 um 11:20 Uhr
nikooo.
Verwenden innerHTML ist ALSO NICHT EMPFEHLENSWERT. 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.
document.getElementById("myspan").innerHTML = "sometext"; //INSECURE!!
Der richtige Weg:
span = document.getElementById("myspan");
txt = document.createTextNode("your cool text");
span.appendChild(txt);
Weitere Informationen zu dieser Schwachstelle:
Cross-Site-Scripting (XSS) – OWASP
Bearbeitet am 04.11.2017:
Geänderte dritte Codezeile gemäß @mumush-Vorschlag: „benutze stattdessen appendChild();“.
Übrigens, laut @Jimbo Jonny sollte alles als Benutzereingabe behandelt werden, indem das Prinzip der Sicherheit durch Schichten angewendet wird. So erleben Sie keine Überraschungen.
Während Sie absolut Recht haben innerHTML
Vorsicht erfordern, beachten Sie, dass Ihre Lösung verwendet innerText
was in Firefox nicht unterstützt wird. quirksmode.org/dom/html Es verwendet auch textContent
was im IE8 nicht unterstützt wird. Sie können Code strukturieren, um diese Probleme zu umgehen.
– Trab
2. Oktober 2014 um 15:48 Uhr
Verwenden span.appendChild(txt);
stattdessen!
– mumusch
3. September 2015 um 17:53 Uhr
Die Frage sagt nichts über Benutzereingaben aus, also eine pauschale Aussage dazu innerHTML
nicht zu empfehlen ist lächerlich. Ganz zu schweigen davon, dass es nach der Desinfektion immer noch in Ordnung ist. Die Idee, dass man Benutzereingaben bereinigen sollte, ist ALSO NICHT ZUSAMMENHÄNGEND zu dieser konkreten Frage. Allenfalls verdient es eine kleine Anmerkung am Schluss “Übrigens: Wenn es sich um Benutzereingaben handelt, stellen Sie sicher, dass Sie sie zuerst bereinigen oder die X-Methode verwenden, die sie nicht benötigt.”.
– Jimbo Jonny
23. Januar 2016 um 20:30 Uhr
Die Verwendung von appendChild funktioniert eigentlich nicht Veränderung der Text, es fügt ihm nur hinzu. Wenn Sie Ihren Code hier verwenden, würde die Spanne von der ursprünglichen Frage am Ende “hereismytextyour cool text” lauten. Vielleicht span.innerHTML = "";
dann appendChild?
– ShaneSauce
9. Mai 2018 um 16:45 Uhr
@JimboJonny Wenn man über Fragen wie diese spricht, die über 650.000 Mal angesehen wurden, ist es völlig irrelevant, was das OP speziell fragt. Daher halte ich es im Interesse der öffentlichen Sicherheit für ratsam, die XSS-Schwachstelle an prominenter Stelle zu erwähnen.
– ja22
16. März 2021 um 7:14 Uhr
Trott
BEARBEITEN: Dies wurde 2014 geschrieben. Sie interessieren sich wahrscheinlich nicht mehr für IE8 und können die Verwendung vergessen innerText
. Benutz einfach textContent
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, dann Einstellung innerHTML
könnte akzeptabel sein:
// * Fine for hardcoded text strings like this one or strings you otherwise
// control.
// * Not OK for user-supplied input or strings you don't control unless
// you know what you are doing and have sanitized the string first.
document.getElementById('myspan').innerHTML = 'newtext';
Wie andere jedoch anmerken, verwenden Sie, wenn Sie nicht die Quelle für einen Teil der Textzeichenfolge sind innerHTML
kann Sie Inhaltsinjektionsangriffen wie XSS aussetzen, wenn Sie nicht darauf achten, den Text zuerst ordnungsgemäß zu bereinigen.
Wenn Sie Eingaben des Benutzers verwenden, ist dies eine Möglichkeit, dies sicher zu tun und gleichzeitig die Cross-Browser-Kompatibilität zu gewährleisten:
var span = document.getElementById('myspan');
span.innerText = span.textContent="newtext";
Firefox unterstützt nicht innerText
und IE8 nicht unterstützt textContent
Sie müssen also beide verwenden, wenn Sie die browserübergreifende Kompatibilität aufrechterhalten möchten.
Und wenn Sie Rückflüsse (verursacht durch innerText
) wo möglich:
var span = document.getElementById('myspan');
if ('textContent' in span) {
span.textContent="newtext";
} else {
span.innerText="newtext";
}
Dan
document.getElementById('myspan').innerHTML = 'newtext';
ich benutze Jquery
und nichts der oben genannten hat geholfen, ich weiß nicht warum, aber das hat funktioniert:
$("#span_id").text("new_value");
Hier ist ein anderer Weg:
var myspan = document.getElementById('myspan');
if (myspan.innerText) {
myspan.innerText = "newtext";
}
else
if (myspan.textContent) {
myspan.textContent = "newtext";
}
Die innerText-Eigenschaft wird von Safari, Google Chrome und MSIE erkannt. Für Firefox bestand die Standardmethode darin, textContent zu verwenden, aber seit Version 45 hat es auch eine innerText-Eigenschaft, wie mir kürzlich jemand freundlicherweise mitgeteilt hat. Diese Lösung testet, ob ein Browser eine dieser Eigenschaften unterstützt, und weist in diesem Fall den “newtext” zu.
Live-Demo: Hier
Mohammed Nagieb
Zusätzlich zu den obigen reinen Javascript-Antworten können Sie jQuery verwenden Text Methode wie folgt:
$('#myspan').text('newtext');
Wenn Sie die Antwort erweitern müssen, um sie zu erhalten / zu ändern html Inhalt eines Span- oder Div-Elements, können Sie Folgendes tun:
$('#mydiv').html('<strong>new text</strong>');
Verweise:
.Text(): http://api.jquery.com/text/
.html(): http://api.jquery.com/html/