Les exemples ci-dessous font référence à l'extrait HTML suivant :
<div id="test">
Warning: This element contains <code>code</code> and <strong>strong language</strong>.
</div>
Le nœud sera référencé par le JavaScript suivant :
var x = document.getElementById('test');
element.innerHTML
Définit ou obtient la syntaxe HTML décrivant les descendants de l'élément.
x.innerHTML
// => "
// => Warning: This element contains <code>code</code> and <strong>strong language</strong>.
// => "
Cela fait partie de l'initiative du W3C. Spécification de l'analyse syntaxique et de la sérialisation du DOM . Notez que c'est une propriété de Element
objets.
node.innerText
Définit ou récupère le texte entre les balises de début et de fin de l'objet.
x.innerText
// => "Warning: This element contains code and strong language."
-
innerText
a été introduit par Microsoft et a été pendant un certain temps non pris en charge par Firefox. En août 2016, innerText
était adopté par le WHATWG et a été ajouté à Firefox dans la v45.
-
innerText
vous donne une représentation du texte qui tient compte du style et qui essaie de correspondre à ce qui est rendu par le navigateur :
-
innerText
s'applique text-transform
et white-space
règles
-
innerText
coupe les espaces blancs entre les lignes et ajoute des sauts de ligne entre les éléments
-
innerText
ne renverra pas de texte pour les éléments invisibles
-
innerText
retournera textContent
pour les éléments qui ne sont jamais rendus, comme <style />
et `
- Propriété de
Node
éléments
node.textContent
Obtient ou définit le contenu textuel d'un nœud et de ses descendants.
x.textContent
// => "
// => Warning: This element contains code and strong language.
// => "
Bien que ce soit un Norme W3C il n'est pas supporté par IE < 9.
- N'est pas conscient de la stylisation et renverra donc le contenu caché par les CSS.
- Ne déclenche pas de reflux (donc plus performant)
- Propriété de
Node
éléments
node.value
Celle-ci dépend de l'élément que vous avez ciblé. Pour l'exemple ci-dessus, x
renvoie un HTMLDivElement qui n'a pas d'objet value
propriété définie.
x.value // => null
Balises d'entrée ( <input />
), par exemple, faire définir un value
propriété qui fait référence à la "valeur actuelle de la commande".
<input id="example-input" type="text" value="default" />
<script>
document.getElementById('example-input').value //=> "default"
// User changes input to "something"
document.getElementById('example-input').value //=> "something"
</script>
De la docs :
Note : pour certains types d'entrée, la valeur retournée peut ne pas correspondre à la valeur saisie par l'utilisateur. Par exemple, si l'utilisateur saisit une valeur non numérique dans un <input type="number">
la valeur retournée peut être une chaîne vide.
Exemple de script
Voici un exemple qui montre la sortie pour le HTML présenté ci-dessus :
var properties = ['innerHTML', 'innerText', 'textContent', 'value'];
// Writes to textarea#output and console
function log(obj) {
console.log(obj);
var currValue = document.getElementById('output').value;
document.getElementById('output').value = (currValue ? currValue + '\n' : '') + obj;
}
// Logs property as [propName]value[/propertyName]
function logProperty(obj, property) {
var value = obj[property];
log('[' + property + ']' + value + '[/' + property + ']');
}
// Main
log('=============== ' + properties.join(' ') + ' ===============');
for (var i = 0; i < properties.length; i++) {
logProperty(document.getElementById('test'), properties[i]);
}
<div id="test">
Warning: This element contains <code>code</code> and <strong>strong language</strong>.
</div>
<textarea id="output" rows="12" cols="80" style="font-family: monospace;"></textarea>
4 votes
@tymeJV Honnêtement, la distinction avec
innerText
une implémentation non standard de textContext par MSIE, est non triviale.4 votes
En plus de innerText qui ne fonctionne pas dans Firefox : textContent semble fonctionner dans tous les principaux navigateurs, il suffit donc d'utiliser textContent au lieu de innerText.
7 votes
NOTE IMPORTANTE : Les 3 commentaires ci-dessus ne sont plus valables.
innerText
a été ajouté aux normes et est pris en charge par tous les principaux navigateurs.textContent
est désormais supporté par IE>=9 et peut être utilisé à la place deinnerText
dans la plupart des cas (en prime, il est beaucoup plus rapide), mais il existe des différences entre les deux, de sorte que dans certains cas, vous ne pouvez pas les intervertir.3 votes
Mise à jour 2019 :
innerText
est bien supporté dans tous les navigateurs. Firefox a commencé à le prendre en charge à partir de la version 45. caniuse.com/#search=innertext0 votes
Je suis surpris que la sécurité ne soit pas abordée ici.
innerHTML
est une vulnérabilité connue pour les attaques XSS. Cela dit,innerText
n'est pas non plus sûr à 100%. stackoverflow.com/questions/52707031/does-innertext-prevent-xss blog.cloudboost.io/