Как расширить IXMLDOMElement, используя "прототип"?
У меня есть код, который был написан пару лет назад и работает только в IE. Я хотел бы, чтобы он работал сейчас с браузером.
Итак, код получает XML с помощью XHR, а затем читает его содержимое. И у меня есть "коллекция" элементов. В FF это тип Element, в IE - IXMLDOMElement. Чтобы сделать чтение текстового значения унифицированным (FF использует свойство textContent, IE text), я хочу добавить метод следующим образом:
Element.prototype.getText = function() {
return this.text || this.textContent;
}
Но когда я пытаюсь сделать это в IE с IXMLDOMElement вместо Element, я получаю ошибку (в IE), что IXMLDOMElement не определен. Как что-то не может быть определено, если это тот тип? (проверено в инструментах разработки IE)
Кто-нибудь может дать мне какой-нибудь совет, подсказку, как с этим бороться?
1 ответ
Интерфейс Element поддерживается в Internet Explorer начиная с версии 8. К сожалению, интерфейсы не поддерживаются в Internet Explorer до версии 8.
Используйте свойство innerText (не текст) в IE, оно поддерживается всеми элементами HTML и имеет ту же функциональность, что и свойство textContent в FF. В JavaScript пустая строка оценивается как ложная, когда она используется в качестве условия, поэтому выражение (this.text || this.textContent) возвращает неопределенное значение вместо пустой строки, если this.text пусто и this.textContent не является поддерживается.
Element.prototype.getText = function() {
return (this.textContent === undefined ? this.innerText : this.textContent);
}
Ссылки по теме: Интерфейсы в JavaScript,
свойство innerText, свойство textContent