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

myElement.innerText = "foo";

然而,'innerText'属性似乎在Firefox中不起作用。Firefox中有类似的吗?或者是否可以使用更通用的跨浏览器属性?


当前回答

jQuery提供了一个.text()方法,可以在任何浏览器中使用。例如:

$('#myElement').text("Foo");

其他回答

myElement.innerText = myElement.textContent = "foo";

编辑(感谢Mark Amery在下面的评论):只有当您确信没有代码会像jQuery那样依赖于检查这些属性是否存在时,才会这样做。但如果你正在使用jQuery,你可能只需要使用"text"函数并执行$('#myElement').text('foo'),就像其他答案显示的那样。

innerText已经添加到Firefox,应该在FF45版本中可用:https://bugzilla.mozilla.org/show_bug.cgi?id=264412

规范草案已经编写完成,并有望在未来被纳入HTML生活标准:http://rocallahan.github.io/innerText-spec/, https://github.com/whatwg/html/issues/465

请注意,目前Firefox、Chrome和IE实现都是不兼容的。展望未来,我们可能会看到Firefox、Chrome和Edge融合在一起,而旧的IE仍然不兼容。

参见:https://github.com/whatwg/compat/issues/5

更新:我写了一篇博客文章,详细介绍了所有的区别。


Firefox使用W3C标准Node::textContent,但它的行为与MSHTML的专有内层文本(在几十个其他MSHTML特性中也被Opera复制了一段时间)“略有不同”。

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

只是为了让事情更有趣,Opera -除了实现标准的textContent -决定还添加MSHTML的innerText,但将其更改为textContent -即包括SCRIPT内容(事实上,textContent和innerText在Opera中似乎产生相同的结果,可能只是别名彼此)。

textContent是Node接口的一部分,而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也有bug的innerText实现。在Safari中,只有当元素为时,innerText才能正常工作 没有隐藏(通过风格。Display == "none")或从文档中孤立。否则,innerText结果为空字符串。

我正在使用textContent抽象(以解决这些缺陷),但结果证明它相当复杂。

最好的办法是先定义您的确切需求,然后从那里开始。通常可以简单地从元素的innerHTML中剥离标签,而不是处理所有可能的textContent/innerText偏差。

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

根据Prakash K的回答,Firefox不支持innerText属性。所以你可以简单地测试用户代理是否支持这个属性,并按照下面的步骤进行:

function changeText(elem, changeVal) {
    if (typeof elem.textContent !== "undefined") {
        elem.textContent = changeVal;
    } else {
        elem.innerText = changeVal;
    }
}

从2016年的Firefox v45开始,innerText在Firefox上工作,看看它的支持:http://caniuse.com/#search=innerText

如果希望它能在以前版本的Firefox上运行,可以使用textContent,它在Firefox上有更好的支持,但在较旧的IE版本上更差:http://caniuse.com/#search=textContent