Wenn ich eine Zeitspanne habe, sagen Sie:
<span id="myspan"> hereismytext </span>
Wie verwende ich JavaScript, um "hereismytext" in "newtext" zu ändern?
Wenn ich eine Zeitspanne habe, sagen Sie:
<span id="myspan"> hereismytext </span>
Wie verwende ich JavaScript, um "hereismytext" in "newtext" zu ändern?
Antworten:
Für moderne Browser sollten Sie Folgendes verwenden:
document.getElementById("myspan").textContent="newtext";
Ältere Browser wissen textContent
dies möglicherweise nicht , es wird jedoch nicht empfohlen, es zu verwenden, innerHTML
da es eine XSS-Sicherheitsanfälligkeit einführt, wenn der neue Text vom Benutzer eingegeben wird (siehe andere Antworten unten für eine detailliertere Diskussion):
//POSSIBLY INSECURE IF NEWTEXT BECOMES A VARIABLE!!
document.getElementById("myspan").innerHTML="newtext";
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.
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 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.
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?
EDIT: Dies wurde im Jahr 2014 geschrieben. Sie interessieren sich wahrscheinlich nicht mehr für IE8 und können die Verwendung vergessen innerText
. Einfach benutzen 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, ist die Einstellung innerHTML
möglicherweise akzeptabel:
// * 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';
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:
var span = document.getElementById('myspan');
span.innerText = span.textContent = 'newtext';
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 :
var span = document.getElementById('myspan');
if ('textContent' in span) {
span.textContent = 'newtext';
} else {
span.innerText = 'newtext';
}
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 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
Neben dem reinen Javascript Antworten oben, Sie jQuery verwenden können Text Methode , wie folgend:
$('#myspan').text('newtext');
Wenn Sie die Antwort erweitern müssen, um den HTML- Inhalt eines span- oder div-Elements abzurufen / zu ändern , können Sie Folgendes tun:
$('#mydiv').html('<strong>new text</strong>');
Verweise:
.text (): http://api.jquery.com/text/
.html (): http://api.jquery.com/html/
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:
document.querySelector('#myspan').textContent = 'newtext';
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
document.getElementById("myspan").textContent="newtext";
Dadurch wird der Dom-Knoten mit der ID ausgewählt myspan
und der Textinhalt in geändertnew text
Du kannst tun
document.querySelector ("[Span]"). textContent = "content_to_display";
Für diese Zeitspanne
<span id="name">sdfsdf</span>
Sie können so gehen: -
$("name").firstChild.nodeValue = "Hello" + "World";