Si j'ai une portée, dites:
<span id="myspan"> hereismytext </span>
Comment utiliser JavaScript pour remplacer "hereismytext" par "newtext"?
document.getElementById("myspan").innerHTML="newtext";
Pour les navigateurs modernes:
document.getElementById("myspan").textContent="newtext";
Utilisation de innerHTML is SO NON RECOMMANDÉ . Vous devez plutôt créer un textNode. De cette façon, vous "liez" votre texte et vous n'êtes pas, du moins dans ce cas, vulnérable aux attaques XSS.
document.getElementById("myspan").innerHTML = "sometext"; //INSECURE!!
Le droit chemin:
span = document.getElementById("myspan");
txt = document.createTextNode("your cool text");
span.appendChild(txt);
Pour plus d'informations sur cette vulnérabilité: Cross Site Scripting (XSS) - OWASP
Édité le 4 novembre 2017:
Troisième ligne de code modifiée selon @mumush suggestion: "utilisez appendChild (); à la place" .
Btw, selon @Jimbo Jonny Je pense que tout devrait être traité comme une entrée d’utilisateur en appliquant le principe Sécurité par couches. De cette façon, vous ne rencontrerez aucune surprise.
document.getElementById('myspan').innerHTML = 'newtext';
EDIT: Ceci a été écrit en 2014. Vous ne vous souciez probablement plus d'IE8 et pouvez oublier d'utiliser innerText
. Il suffit d’utiliser textContent
et d’en finir, hourra.
Si vous êtes celui qui fournit le texte et qu'aucune partie du texte n'est fournie par l'utilisateur (ou une autre source que vous ne contrôlez pas), définir innerHTML
peut être acceptable:
// * 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';
Toutefois, comme d’autres personnes le remarquent, si vous n’êtes pas le source de toute partie de la chaîne de texte, utiliser innerHTML
peut vous exposer à des attaques par injection de contenu telles que XSS si vous ne prenez pas soin de nettoyer correctement le texte.
Si vous utilisez les entrées de l'utilisateur, voici une façon de le faire en toute sécurité tout en maintenant la compatibilité entre navigateurs:
var span = document.getElementById('myspan');
span.innerText = span.textContent = 'newtext';
Firefox ne supporte pas innerText
et IE8 ne supporte pas textContent
. Vous devez donc utiliser les deux si vous souhaitez maintenir la compatibilité entre navigateurs.
Et si vous voulez éviter les reflux (causés par innerText
) dans la mesure du possible:
var span = document.getElementById('myspan');
if ('textContent' in span) {
span.textContent = 'newtext';
} else {
span.innerText = 'newtext';
}
J'utilise Jquery
et rien de ce qui précède n'a aidé, je ne sais pas pourquoi mais cela a fonctionné:
$("#span_id").text("new_value");
Voici un autre moyen:
var myspan = document.getElementById('myspan');
if (myspan.innerText) {
myspan.innerText = "newtext";
}
else
if (myspan.textContent) {
myspan.textContent = "newtext";
}
La propriété innerText sera détectée par Safari, Google Chrome et MSIE. Pour Firefox, la méthode standard consistait à utiliser textContent, mais depuis la version 45, celle-ci possède également une propriété innerText, comme quelqu'un m'a gentiment informé récemment. Cette solution teste si un navigateur prend en charge l’une ou l’autre de ces propriétés et, le cas échéant, affecte le "newtext".
Démo en direct: ici
En plus des réponses javascript pures ci-dessus, vous pouvez utiliser la méthode jQuery text comme suit:
$('#myspan').text('newtext');
Si vous avez besoin d'étendre la réponse pour obtenir/modifier le contenu de html d'un span ou d'un div, procédez comme suit:
$('#mydiv').html('<strong>new text</strong>');
Références:
.text (): http://api.jquery.com/text/
.html (): http://api.jquery.com/html/
Vous pouvez également utiliser la méthode querySelector (), en supposant que l'identifiant 'myspan' est unique car la méthode retourne le premier élément avec le sélecteur spécifié:
document.querySelector('#myspan').textContent = 'newtext';
Comme dans une autre réponse, innerHTML et innerText_ ne sont pas recommandés, il vaut mieux utiliser textContent. Cet attribut est bien supporté, vous pouvez vérifier ceci: http://caniuse.com/#search=textContent
Tu peux faire
document.querySelector ("[Span]"). textContent = "content_to_display";
document.getElementById("myspan").textContent="newtext";
ceci sélectionnera dom-node avec id myspan
et changera le contenu textuel en new text