JS/jQueryでIEのバージョンを判定しクラスとして追加する
JSでIEのバージョンによって処理を分岐したいとき、どんな方法があるのか調べていると、ユーザーエージェントを使った方法が一般的のようでした。しかし、ユーザーエージェントは簡単に偽装できるので、信頼性に欠けます。そこで、今回は確実性の高い方法で判定する方法を紹介します。
クラスを追加
// バージョン
var version = '';
// DOM追加
$('body').append(''
+''
+''
+''
+''
+'');
// 判定
if ($('.ua-ie8').length > 0)
{
version = 'ie8';
}
else if ($('.ua-ie9').length > 0)
{
version = 'ie9';
}
else
{
var ie10_11 = window.getComputedStyle($('.ua-ie10-11')[0], ':before').getPropertyValue('content');
if (ie10_11 == '"ie10"')
{
version = 'ie10';
}
else if (ie10_11 == '"ie11"')
{
version = 'ie11';
}
}
// html要素にクラス追加
$('html').addClass(version);
// 追加したDOMの削除
$('.ua-ie').remove();
IEのバージョンを調べるためにDOMを追加します。IE8/9の場合は条件分岐コメントを使いますが、IE10以上は条件分岐コメントによる判定ができないので、以前記事で紹介したCSSハックを使います。
IE6/7/8/9/10/11それぞれのバージョンのみに適用させるCSSハックまとめ
また、JSで疑似要素のCSSを取得を取得する方法も過去記事で紹介しています。
JS/jQueryでCSS疑似要素である:before:afterのプロパティを取得し変更する
今回、対象とするIEのバージョンは8〜11ですが、もしIE6/7にも対応させたい場合は、IE8/9のように条件分岐コメントを追加してください。
判定
<html class=”ie9″> のようにクラスが追加されるので、あとはクラスがあるかどうかで判定するだけです。
if ($('.ie8').length > 0)
{
// IE8の場合
}
こんな感じで特定のバージョンのときのみの処理を実行できます。