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

Javascript innerText/textContent与检索每个文本节点,javascript,dom,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); } whi

我听说使用
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;

}
此函数用于遍历元素中的所有节点,并收集所有文本节点的文本以及子体中的文本:

例如

我很确定使用
innerText
textContent
会有问题,但我在任何地方都找不到确切的列表,我开始怀疑这是否只是道听途说

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


编辑:Kangax找到了这个很好的答案--

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

谢谢John。我很惊讶在网上其他地方几乎没有提到这个问题。。。即使是QuirksMode也没有提到它。遍历并不能保证在所有浏览器中都有相同的结果。例如,在IE中(与其他浏览器不同),
元素的内容在DOM中不表示为文本节点。如此简单,如此有用!把
3
改为
document.TEXT\u节点如何?旧浏览器不支持这种功能吗?
<div id="x">foo <em>foo...</em> foo</div>
getText(document.getElementById('x')); // => "foo foo... foo"