一尘不染

JavaScript 'innerText'在IE中有效,但在Firefox中不可用

javascript

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

myElement.innerText = "foo";

但是,似乎’innerText’属性在Firefox中不起作用。是否有与Firefox相当的产品?还是可以使用更通用的跨浏览器属性?


阅读 281

收藏
2020-04-23

共2个答案

一尘不染

Firefox使用textContent属性。

我猜想Safari和Opera也支持此属性。

2020-04-23
一尘不染

Firefox使用W3C标准Node::textContent,但其行为与MSHTML专有的行为“略有不同” innerText(一段时间前,Opera也复制了其中的许多其他MSHTML功能)。

首先,textContent空格表示不同于空格表示innerText。其次,更重要的是,textContent包括所有SCRIPT标签内容,而innerText不包含。

只是为了让事情更有趣,歌剧院-除了执行标准textContent决定也添加MSHTMLinnerText ,但改变了它作为textContent -即包括脚本内容(事实上,textContentinnerText在Opera似乎产生相同的结果,可能是被刚刚化名为对方) 。

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

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

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

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

最后,Safari 2.x也具有错误的innerText实现。在Safari中,innerText仅当元素既未隐藏(通过style.display == "none")也不从文档孤立时,它才能正常运行。否则,将innerText导致一个空字符串。

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

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

2020-04-23