Si j'ai un la travée dire :
<span id="myspan"> hereismytext </span>
Comment utiliser JavaScript pour remplacer "hereismytext" par "newtext" ?
Si j'ai un la travée dire :
<span id="myspan"> hereismytext </span>
Comment utiliser JavaScript pour remplacer "hereismytext" par "newtext" ?
Pour les navigateurs modernes, vous devez utiliser :
document.getElementById("myspan").textContent="newtext";
Bien que les navigateurs plus anciens puissent ne pas connaître textContent
il n'est pas recommandé d'utiliser innerHTML
car il introduit une vulnérabilité XSS lorsque le nouveau texte est saisi par l'utilisateur (voir les autres réponses ci-dessous pour une discussion plus détaillée) :
//POSSIBLY INSECURE IF NEWTEXT BECOMES A VARIABLE!!
document.getElementById("myspan").innerHTML="newtext";
@Gregoire gardez à l'esprit que votre solution ne fonctionne pas sur ie8 au moins. Voir stackoverflow.com/questions/2119300/
Utilisation innerHTML est DONC DÉCONSEILLÉ . Au lieu de cela, vous devez créer un textNode. De cette manière, vous "liez" votre texte et vous n'êtes pas, du moins dans ce cas, vulnérable à une attaque XSS.
document.getElementById("myspan").innerHTML = "sometext"; //INSECURE!!
La bonne méthode :
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 :
Modification de la troisième ligne de code en fonction de @mumush suggestion : "utiliser appendChild() ; à la place".
Par ailleurs, selon @Jimbo Jonny Je pense que tout devrait être traité comme un apport de l'utilisateur en appliquant le principe de la sécurité par couches. De cette manière, vous n'aurez pas de surprises.
Vous avez tout à fait raison en ce qui concerne innerHTML
par prudence, notez que votre solution utilise innerText
qui n'est pas pris en charge par Firefox. quirksmode.org/dom/html Il utilise également textContent
qui n'est pas pris en charge par IE8. Vous pouvez structurer le code pour contourner ces problèmes.
La question ne dit rien sur l'apport de l'utilisateur. innerHTML
n'est pas recommandé est ridicule. Sans compter qu'une fois assainie, elle est encore très bien. L'idée qu'il faut assainir les entrées utilisateur est DONC PAS EN RAPPORT AVEC LE SUJET à cette question spécifique. Tout au plus mériterait-il une petite note à la fin de l'ouvrage disant "btw : s'il s'agit d'une entrée utilisateur, assurez-vous d'assainir d'abord ou d'utiliser une méthode X qui n'en a pas besoin. .
EDIT : Ce texte a été écrit en 2014. Beaucoup de choses ont changé. Vous ne vous souciez probablement plus d'IE8. Et Firefox prend désormais en charge innerText
.
Si c'est vous qui fournissez le texte et qu'aucune partie du texte n'est fournie par l'utilisateur (ou par une autre source que vous ne contrôlez pas), alors le paramètre innerHTML
pourrait ê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 l'ont fait remarquer, si vous n'êtes pas la source d'une partie quelconque de la chaîne de texte, l'utilisation de la fonction innerHTML
peut vous exposer à des attaques par injection de contenu telles que XSS si vous ne prenez pas soin d'assainir correctement le texte au préalable.
Si vous utilisez les données de l'utilisateur, voici une façon de le faire en toute sécurité tout en maintenant la compatibilité entre les navigateurs :
var span = document.getElementById('myspan');
span.innerText = span.textContent = 'newtext';
Firefox ne prend pas en charge innerText
et IE8 ne prend pas en charge textContent
vous devez donc utiliser les deux si vous voulez maintenir la compatibilité entre les navigateurs.
Et si vous voulez éviter les reflux (causés par les innerText
) dans la mesure du possible :
var span = document.getElementById('myspan');
if ('textContent' in span) {
span.textContent = 'newtext';
} else {
span.innerText = 'newtext';
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.