innerText / textContent vs. récupération de chaque nœud de texte [dupliquer]

Cette question a déjà une réponse ici:

J'ai entendu dire que l'utilisation de el.innerText||el.textContent peut donner des résultats peu fiables, et c'est pourquoi j'ai toujours insisté sur l'utilisation de la fonction suivante dans le passé:

function getText(node) {

    if (node.nodeType === 3) {
        return node.data;
    }

    var txt = '';

    if (node = node.firstChild) do {
        txt += getText(node);
    } while (node = node.nextSibling);

    return txt;

}

Cette fonction passe par tous les nœuds d'un élément et rassemble le texte de tous les nœuds de texte et le texte dans les descendants:

Par exemple

<div id="x">foo <em>foo...</em> foo</div>

Résultat:

getText(document.getElementById('x')); // => "foo foo... foo"

Je suistout à fait sûr qu'il y a des problèmes avec l'utilisation de innerText et textContent, mais je n'ai pas été en mesure de trouver une liste définitive nulle part et je commence à me demander si c'est juste ouï-dire.

Quelqu'un peut-il offrir des informations sur le manque de fiabilité possible de textContent/innerText?

EDIT : trouvé cette excellente réponse par Kangax -- 'innerText' fonctionne dans C'est à dire, mais pas dans Firefox

32
demandé sur Community 2010-04-16 18:27:16

1 réponses

Il s'agit de lignes de fin et d'espaces - les navigateurs sont très incohérents à cet égard, en particulier dans Internet Explorer. Faire la traversée est un moyen infaillible pour obtenir des résultats identiques dans tous les navigateurs.

33
répondu John Resig 2010-04-16 15:02:03