Предполагая, что ...
- ... что это хрустящий движок рендеринга старых версий IE, который вы хотите обнаружить, чтобы стиль выглядел правильно в старом IE (в противном случае используйте функцию обнаружения)
- ... что вы не можете просто добавить условные комментарии к HTML - например, для плагинов JS, которые могут быть применены к любой странице (в противном случае просто сделайте трюк с условными классами на
<body>
или <html>
)
... тогда это, вероятно, лучший трюк (на основе это не-jQuery, немного менее гибкий вариант ). Затем он создает тесты, а затем удаляет соответствующий условный комментарий.
(Условные комментарии игнорируются в стандартном режиме IE10 +, но это должно быть хорошо, поскольку в стандартном режиме IE10 + нет движка рендеринга!)
Отключение этой функции:
function isIE( version, comparison ){
var $div = $('<div style="display:none;"/>');
// Don't chain these, in IE8 chaining stops some versions of jQuery writing the conditional comment properly
$div.appendTo($('body'));
$div.html('<!--[if '+(comparison||'')+' IE '+(version||'')+']><a> </a><![endif]-->');
var ieTest = $div.find('a').length;
$div.remove();
return ieTest;
}
Тогда используйте это так:
if(isIE()){ /* runs in all versions of IE after 4 before standards-mode 10 */ }
if(isIE(8)){ /* runs in IE8 */ }
if(isIE(9)){ /* runs in IE9 */ }
if(isIE(8,'lte')){ /* runs in IE8 or below */ }
if(isIE(6,'lte')){ /* if you need this, I pity you... */ }
Я бы также предложил кэшировать результаты этой функции, чтобы вам не приходилось повторять ее. Например, вы можете использовать строку (comparison||'')+' IE '+(version||'')
в качестве ключа для хранения и проверки результата этого теста в каком-либо объекте.