想定しています...
- ... 古い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||'')
をキーとして使用して、どこかでオブジェクトのこのテストの結果を保存および確認できます。