“innerText”在IE中工作,但在Firefox中不起作用

我有一些在IE中工作的JavaScript代码,其中包含以下内容:

myElement.innerText = "foo";

但是,似乎“innerText”属性在Firefox中不起作用。有没有一些火狐的等价物?或者是否有可以使用更通用的跨浏览器属性?


答案 1

更新:我写了一篇博客文章,详细介绍了所有差异


Firefox使用W3C标准,但其行为与MSHTML专有的行为“略有不同”(前段时间,Opera也在数十个其他MSHTML功能中复制)。Node::textContentinnerText

首先,空格表示与一个不同。其次,更重要的是,它包含所有 SCRIPT 标记内容,而 innerText 则不包含。textContentinnerTexttextContent

为了使事情更具娱乐性,Opera - 除了实现标准 - 决定也添加MSHTML,但将其更改为充当textContent - 即包括SCRIPT内容(实际上,在Opera中似乎产生相同的结果,可能只是彼此别名)。textContentinnerTexttextContentinnerText

textContent是接口的一部分,而 是 的一部分。例如,这意味着您可以“检索”,但不能从文本节点中检索:NodeinnerTextHTMLElementtextContentinnerText

var el = document.createElement('p');
var textNode = document.createTextNode('x');

el.textContent; // ""
el.innerText; // ""

textNode.textContent; // "x"
textNode.innerText; // undefined

最后,Safari 2.x也有错误的实现。在 Safari 浏览器中,仅当元素既不隐藏(通过)也不从文档中孤立时,才能正常运行。否则,将生成空字符串。innerTextinnerTextstyle.display == "none"innerText

我一直在玩抽象(以解决这些缺陷),但事实证明它相当复杂textContent

您最好的选择是首先定义您的确切要求,然后从那里开始。通常可以简单地从元素上剥离标签,而不是处理所有可能的/偏差。innerHTMLtextContentinnerText

当然,另一种可能性是遍历 DOM 树并以递归方式收集文本节点。


答案 2

Firefox 使用符合 W3C 标准的 textContent 属性。

我猜Safari和Opera也支持这个属性。