我正在测试最早可追溯到2004年的各种浏览器的行为。有些浏览器不支持DOM元素的textContent
属性。 This answer显示了一种优雅的解决方案,该解决方案可在IE8上运行,但遗憾的是,不适用于IE的早期版本,也不适用于Opera 8.5。是否有替代方案,它们不需要Object.defineProperty
,也不需要使用__defineGetter__
,__defineSetter__
,因为Opera 8.5中也不支持。
此刻,我正在使用这种丑陋的解决方法:
function setTextContent(el,s) {
if (typeof el.textContent === 'undefined') {
el.innerText = s;
} else {
el.textContent = s;
}
}
以及类似的获取方式。
编辑:
如@LeroyStav建议的document.createTextNode
可用于设置文本内容。它没有提供获取文本内容的替代方法,但是如果新创建的文本节点所包含的元素中没有子元素,则innerHTML
将返回相同的内容。该功能可在IE7和Opera 8.5(我测试过的最旧的版本)中使用:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<script charset="utf-8">
window.onload = function () {
var t = document.createTextNode('<'+'script>alert("foo")<'+'/script>');
var cont = document.getElementById('foo'); // set the text content
cont.appendChild(t);
alert(cont.innerHTML); // get the text content (if no children)
}
</script>
</head>
<body>
<div id='foo'></div>
</body>
</html>