【共存】新スキンでjQuery1.3と1.6をきれいに共存させる【バージョン違い】 | blog lab 【アメブロカスタマイズとネタ話】

blog lab 【アメブロカスタマイズとネタ話】

コメント欄にプロフィール画像、などのカスタマイズの小ネタと、普段の話のネタを書いていきます。

Adam Sontag by Cowboy Ben Alman, on Flickr


新スキンは素晴らしいんですが、問題点の一つが『jQueryのバージョンが強制的に1.3にされてしまう』という点です。
HTMLのお尻の方に嫌がらせのごとく1.3が埋め込まれていて、1.6をフリープラグインで埋め込んでも1.3に戻されてしまうんですよね。
これでは最新のプラグインは動きませんし、動作も鈍いです。

それを見事に解決した記事があったのでまずご紹介します。

わざめーばさんの記事
新しいバージョンのjQueryが使えない?新デザイン『CSS編集用デザイン』

ここでのコードはこんな感じです。

< script type="text/javascript" >
(_JQ162_=jQuery)(function(){
$=jQuery=_JQ162_;
});
</script>

※もちろん、(_JQ162_=$)(function(){$=jQuery=_JQ162_;});でもOKです。
すんばらしいアイディア!
わざめーばさん、勝手に紹介してしまいスミマセン(まずかったら言っていただければ書きなおします)。

ただこれだと、windowのプロパティに『_JQ162_』←コイツが生えてしまうので、自分は少し変えて使っています。

< script type="text/javascript" >
(function($){
var JQ16 = $;
JQ16(function(){
window.$=window.jQuery=JQ16;
});
}(jQuery));
</script>

やってることは全く同じで、クロージャの中で完結させているだけです。
つまり・・・

<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
< script type="text/javascript" >
(function($){
var JQ16 = $;
JQ16(function(){
window.$=window.jQuery=JQ16;
});
}(jQuery));
</script>

これをプラグインの先頭に張ればめでたく1.6が作動します。
名前空間を上書きしているだけなので、デメリットもありません。安心!

ただこれだけだとパクリ記事みたいなので、自在に1.3と1.6をスイッチするメソッドを考えてみました。
1.3系じゃないと動かないプラグインを使ってる人もこれで安心(?)

< script type="text/javascript" >
var JQobj = (function(){
var jq=jQuery;
var jq13;
return{
getJQ16:function(){
jq13 = window.jQuery !== jq ? window.jQuery : jq13;
window.jQuery = jq;
},
getJQ13:function(){
window.jQuery = window.$ = jq13 || window.jQuery;
}
};
}());

/*jQueryを1.6にする*/
JQobj.getJQ16();

/*1.3にする*/
JQobj.getJQ13();
</script>

これで多い日も安心だ!・・・

と、ここで勘のいい方はお気づきかもしれませんが、JQobjが思いっきりグローバル変数ですw
そこでどうしようかと考えたのですが、jQueryの静的メソッドにしてしまえ、という結論にw

< script type="text/javascript" >
(function($){
$.jqVersionSelector = (function(){
var jq=jQuery;
var jq13;
return{
getJQ16:function(){
jq13 = window.jQuery !== jq ? window.jQuery : jq13;
window.jQuery = jq;
},
getJQ13:function(){
window.jQuery = window.$ = jq13 || window.jQuery;
}
};
}());

var sel16 = $.jqVersionSelector;

jQuery(function(){
$.jqVersionSelector = sel16;
});

}(jQuery));


/*jQueryを1.6にする*/
$.jqVersionSelector.getJQ16();

/*1.3にする*/
$.jqVersionSelector.getJQ13();

</script>

これでおっけぇぇぇ!

では早速バージョンを変えまくって遊んでみましょう。

< script type="text/javascript" >
jQuery(function(){

$.jqVersionSelector.getJQ16();
alert(jQuery.fn.jquery);/*バージョンチェック*/

$.jqVersionSelector.getJQ13();
alert(jQuery.fn.jquery);/*バージョンチェック*/

$.jqVersionSelector.getJQ16();
alert(jQuery.fn.jquery);/*バージョンチェック*/

$.jqVersionSelector.getJQ16();
alert(jQuery.fn.jquery);/*バージョンチェック*/

$.jqVersionSelector.getJQ13();
alert(jQuery.fn.jquery);/*バージョンチェック*/

$.jqVersionSelector.getJQ13();
alert(jQuery.fn.jquery);/*バージョンチェック*/

$.jqVersionSelector.getJQ16();
alert(jQuery.fn.jquery);/*バージョンチェック*/

});

</script>


結果はこちら。
ぜひ遊んでみてくださいw