innerText / textContent与检索每个文本节点

时间:2010-04-16 14:27:17

标签: javascript dom

我听说使用el.innerText||el.textContent会产生不可靠的结果,这就是我过去一直坚持使用以下功能的原因:

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;

}

此函数遍历元素中的所有节点,并收集所有文本节点的文本以及后代中的文本:

E.g。

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

结果:

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

相当确定使用innerTexttextContent时出现问题,但我无法在任何地方找到确定的列表,我开始想知道它是否只是传闻

任何人都可以提供有关textContent / innerText可能缺乏可靠性的任何信息吗?

编辑:Kangax找到了这个很棒的答案 - 'innerText' works in IE, but not in Firefox

1 个答案:

答案 0 :(得分:33)

关于端点和空白的一切 - 浏览器在这方面非常不一致,尤其是在Internet Explorer中。进行遍历是在所有浏览器中获得相同结果的可靠方法。