Я тестирую поведение различных браузеров, начиная с 2004 года. Некоторые не поддерживают свойство textContent
элементов DOM. Этот ответ показывает элегантное решение, которое работает на 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>