Полифилл для 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-элемент. Но это лишь оптимизация, общий подход верен.