Mise à jour : J'ai écrit un article de blog détaillant toutes les différences bien mieux.
Firefox utilise la norme W3C Node::textContent
, mais son comportement diffère "légèrement" de celui de innerText
propriétaire de MSHTML (copié par Opera également, il y a quelque temps, parmi des dizaines d'autres fonctionnalités de MSHTML).
Tout d'abord, la représentation des espaces blancs de textContent
est différente de celle de innerText
. Deuxièmement, et plus important encore, textContent
inclut l'intégralité du contenu de la balise SCRIPT, alors que innerText ne le fait pas.
Juste pour rendre les choses plus divertissantes, Opera - en plus de mettre en œuvre le textContent
standard - a décidé d'ajouter également le innerText
de MSHTML mais l'a modifié pour agir comme textContent
- c'est-à-dire en incluant le contenu du SCRIPT (en fait, textContent
et innerText
dans Opera semblent produire des résultats identiques, étant probablement juste des alias l'un de l'autre).
textContent
fait partie de l'interface Node
, tandis que innerText
fait partie de HTMLElement
. Cela signifie, par exemple, que vous pouvez "récupérer" textContent
mais pas innerText
à partir des nœuds de texte :
var el = document.createElement('p');
var textNode = document.createTextNode('x');
el.textContent; // ""
el.innerText; // ""
textNode.textContent; // "x"
textNode.innerText; // undefined
Enfin, Safari 2.x a également une implémentation buggy de innerText
. Dans Safari, innerText
fonctionne correctement uniquement si un élément n'est ni caché (via style.display == "none"
) ni orphelin dans le document. Sinon, innerText
renvoie une chaîne vide.
J'ai essayé de jouer avec l'abstraction de textContent
(pour contourner ces lacunes), mais cela s'est avéré être plutôt complexe.
Votre meilleure option est de définir d'abord vos besoins exacts et de suivre à partir de là. Il est souvent possible de simplement supprimer les balises de innerHTML
d'un élément, plutôt que de gérer toutes les éventuelles déviations de textContent
/innerText
.
Une autre possibilité, bien sûr, est de parcourir l'arbre DOM et de collecter récursivement les nœuds de texte.