我有一些适用于 IE 的 JavaScript 代码,其中包含以下内容:
myElement.innerText = "foo";
但是,似乎 'innerText' 属性在 Firefox 中不起作用。是否有一些 Firefox 等价物?或者是否有可以使用的更通用的跨浏览器属性?
我有一些适用于 IE 的 JavaScript 代码,其中包含以下内容:
myElement.innerText = "foo";
但是,似乎 'innerText' 属性在 Firefox 中不起作用。是否有一些 Firefox 等价物?或者是否有可以使用的更通用的跨浏览器属性?
更新:我写了一篇博文,详细说明了所有差异。
Firefox 使用 W3C 标准Node::textContent
,但其行为与 MSHTML 的专有行为“略有不同” innerText
(前一段时间,Opera 也复制了许多其他 MSHTML 功能)。
首先,textContent
空白表示与innerText
一个不同。其次,更重要的是,textContent
包括所有 SCRIPT 标签内容,而 innerText 不包括。
只是为了让事情更有趣,歌剧院-除了执行标准textContent
-决定也添加MSHTML的innerText
,但改变了它作为textContent
-即包括脚本内容(事实上,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 也有错误的innerText
实现。在 Safari 中,innerText
仅当元素既不隐藏(通过style.display == "none"
)也不从文档中孤立时才能正常运行。否则,innerText
结果为空字符串。
我在玩textContent
抽象(为了解决这些缺陷),但结果证明它相当复杂。
您最好的选择是首先定义您的确切要求,然后从那里开始。通常可以简单地从innerHTML
元素上剥离标签,而不是处理所有可能的textContent
/innerText
偏差。
当然,另一种可能性是遍历 DOM 树并递归收集文本节点。
Firefox 使用符合W3C 的 textContent属性。
我猜 Safari 和 Opera 也支持这个属性。
如果您只需要设置文本内容而不需要检索,这里有一个简单的 DOM 版本,您可以在任何浏览器上使用;它不需要 IE innerText 扩展或 DOM Level 3 Core textContent 属性。
function setTextContent(element, text) {
while (element.firstChild!==null)
element.removeChild(element.firstChild); // remove all existing content
element.appendChild(document.createTextNode(text));
}
根据 Prakash K 的回答,Firefox 不支持 innerText 属性。因此,您可以简单地测试用户代理是否支持此属性并按如下方式进行:
function changeText(elem, changeVal) {
if (typeof elem.textContent !== "undefined") {
elem.textContent = changeVal;
} else {
elem.innerText = changeVal;
}
}