Как расширить IXMLDOMElement, используя «прототип»? - PullRequest
0 голосов
/ 18 августа 2010

У меня есть код, который был написан пару лет назад и работает только в IE.Я хотел бы, чтобы он работал сейчас с браузером.

Итак, код получает XML с помощью XHR, а затем читает его содержимое.И у меня есть «коллекция» элементов.В FF это тип Элемент , в IE это IXMLDOMElement .Чтобы сделать чтение текстового значения унифицированным (FF использует свойство textContent , IE text ), я хочу добавить метод следующим образом:

Element.prototype.getText = function() {
    return this.text || this.textContent;
}

Но, когда я пытаюсьсделать это в IE с IXMLDOMElement вместо Element , тогда я получаю ошибку (в IE), что IXMLDOMElement не определен.Как что-то не может быть определено, если это тот тип?(проверено в инструментах разработки IE)

Кто-нибудь может дать мне какой-нибудь совет, подсказку, как с этим бороться?

1 Ответ

0 голосов
/ 18 августа 2010

Интерфейс 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

...