我有一些可在IE中运行的JavaScript代码,其中包含以下内容:
myElement.innerText = "foo";
但是,似乎’innerText’属性在Firefox中不起作用。是否有与Firefox相当的产品?还是可以使用更通用的跨浏览器属性?
Firefox使用textContent属性。
我猜想Safari和Opera也支持此属性。
Firefox使用W3C标准Node::textContent,但其行为与MSHTML专有的行为“略有不同” innerText(一段时间前,Opera也复制了其中的许多其他MSHTML功能)。
Firefox
Node::textContent
innerText
首先,textContent空格表示不同于空格表示innerText。其次,更重要的是,textContent包括所有SCRIPT标签内容,而innerText不包含。
textContent
只是为了让事情更有趣,歌剧院-除了执行标准textContent决定也添加MSHTML的innerText ,但改变了它作为textContent -即包括脚本内容(事实上,textContent和innerText在Opera似乎产生相同的结果,可能是被刚刚化名为对方) 。
MSHTML
textContent是Node接口的一部分,而是innerText的一部分HTMLElement。例如,这意味着你可以“检索”,textContent但不能innerText从文本节点中检索:
Node
HTMLElement
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导致一个空字符串。
style.display == "none"
我在玩textContent抽象(以解决这些缺陷),但事实证明它相当复杂。
最好的选择是首先定义你的确切要求,然后从那里开始。通常可以简单地从innerHTML一个元素上剥离标签,而不是处理所有可能的textContent/ innerText偏差。
innerHTML
textContent/ innerText