
複数のバージョンの jQuery を共存させる方法2011-10-04
古いアプリをメンテしてて、元々の jQuery のバージョンが 1.0 だの 1.1 だのだとすごく残念な気持ちになりますね。やっぱり、最新の jQuery でサクサク書きたいものです。
バージョンを上げてしまえればいいんですが、動作確認の手間まで考えると、そこまでやる時間もない。いま、ちょっとこの画面だけ手直し出来ればいいんだけど…という場合は、複数のバージョンの jQuery を共存させてしまいましょう。
jQuery には $ の競合を避けるための jQuery.noConflict という function が用意されていますが、これに引数で true を渡すと、window.jQuery オブジェクトの競合も避けるように動作します。
ですので以下のように書けば、複数のバージョンの jQuery が共存出来ます。
現実的にやる事はないと思いますが、onload を追加する事で、3つでも 4 つでも共存可能という事です。
バージョンを上げてしまえればいいんですが、動作確認の手間まで考えると、そこまでやる時間もない。いま、ちょっとこの画面だけ手直し出来ればいいんだけど…という場合は、複数のバージョンの jQuery を共存させてしまいましょう。
jQuery には $ の競合を避けるための jQuery.noConflict という function が用意されていますが、これに引数で true を渡すと、window.jQuery オブジェクトの競合も避けるように動作します。
ですので以下のように書けば、複数のバージョンの jQuery が共存出来ます。
現実的にやる事はないと思いますが、onload を追加する事で、3つでも 4 つでも共存可能という事です。
<script> $(function() { var func = function() { // 実際に動作させたい部分 var $16 = jQuery.noConflict(true); alert($.fn.jquery); // old version alert($16.fn.jquery); // ver 1.6 } // 使いたいバージョンの jQuery を用意し、load イベントを設定 var s = $('<script>').attr('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js').load(func).get(0); // IE の場合は script の onload が発生しないので onreadystatechange で検知 s.onreadystatechange = function() { if (this.readyState == 'loaded' || this.readyState == 'complete') { func(); } } // jQuery.append だと load イベントが発生しない(?)ようなので、生 DOM で head に script を追加 $('head').get(0).appendChild(s); }); </script>
カテゴリ: Development タグ: jquery javascript