Wie ändere ich den Text eines span-Elements mit JavaScript?

Lesezeit: 5 Minuten

Wie andere ich den Text eines span Elements mit JavaScript
Benutzer105033

Wenn ich eine habe Spannesagen:

<span id="myspan"> hereismytext </span>

Wie verwende ich JavaScript, um “hereismytext” in “newtext” zu ändern?

1646262727 213 Wie andere ich den Text eines span Elements mit JavaScript
Gregor

Für moderne Browser sollten Sie verwenden:

document.getElementById("myspan").textContent="newtext";

Während ältere Browser es möglicherweise nicht wissen textContentes 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

1646262728 372 Wie andere ich den Text eines span Elements mit JavaScript
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

Wie andere ich den Text eines span Elements mit JavaScript
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";
}

1646262729 278 Wie andere ich den Text eines span Elements mit JavaScript
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

Wie andere ich den Text eines span Elements mit JavaScript
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/

917120cookie-checkWie ändere ich den Text eines span-Elements mit JavaScript?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy