ES5之前的Object.defineProperty:别名textContent到innerText

时间:2019-01-20 00:26:48

标签: javascript cross-browser javascript-objects

我正在测试最早可追溯到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>

0 个答案:

没有答案