Я смотрю вокруг, и везде говорят, что IE8 имеет классы HTMLDocument и Element. К сожалению, когда я пытаюсь получить к нему доступ, все, что я получаю, это:
"'HTMLDocument' is undefined"
"'HTMLElement' is undefined"
"'Element' is undefined"
"'Document' is undefined"
Я подозреваю, что это консольные ошибки, но то же самое происходит, когда я загружаю его из сценария и прототипа, т.е. Array действительно существует.
Может быть, я пытаюсь получить доступ к нему не так? Я использую:
typeof HTMLDocument.prototype.getElementsByClassName != 'function'
Хорошо, я нашел его. IE устанавливает режим Quirks для страницы, на которой я тестировал ее. К сожалению, я не могу установить режим документа в этом случае, поэтому добавление собственного getElementsByClassName является потерянной причиной...
Для тех, кто может редактировать html-документ, над которым они работают, добавьте этот метатег, чтобы гарантировать, что IE8 будет действовать как IE8:
<meta http-equiv="X-UA-Compatible" content="IE=8">
Я не уверен, но может быть, потому что вы в режиме совместимости.
Вы можете сделать что-то вроде:
var elementPrototype = typeof HTMLElement !== "undefined"
? HTMLElement.prototype : Element.prototype;
Но это будет работать для IE7+.
var hasClass = function (el, searchClass) {
return el.className.test(new RegExp('(\\s|^)' + searchClass + '(\\s|$)'));
};
Вы не можете добавлять методы в HTMLElement.prototype
в более старых версиях IE.
Вы всегда можете добавить это к объекту Object.prototype
но он нахмурился
(typeof document.getElementsByClassName !== 'function')
?