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"