Полифилл для textContent
Свойство textContent не поддерживается IE8. Однако, там есть свойство innerText.
Создаёте полифилл, который проверяет поддержку свойства textContent, и если её нет – создаёт его, используя innerText. Получится, что в IE8 «новое» свойство textContent будет «псевдонимом» для innerText.
Хотя свойство innerText и работает по-иному, нежели textContent, но в некоторых ситуациях они могут быть взаимозаменимы. Именно на них направлен полифилл.
Код для полифилла здесь имеет стандартный вид:
(function() {
// проверяем поддержку
if (document.documentElement.textContent === undefined) {
// определяем свойство
Object.defineProperty(HTMLElement.prototype, "textContent", {
get: function() {
return this.innerText;
},
set: function(value) {
this.innerText = value;
}
});
}
})();
Единственный тонкий момент – в проверке поддержки.
Мы часто можем использовать уже существующий элемент. В частности, при проверке firstElementChild мы можем проверить его наличие в document.documentElement.
Однако, в данном случае попытка получить document.documentElement.textContent при поддержке этого свойства приведёт к совершенно лишним затратам времени и памяти, так как браузер будет динамически генерировать строку из содержимого документа.
Поэтому лучше бы использовать пустой DOM-элемент. Но это лишь оптимизация, общий подход верен.