- ベストアンサー
jQueryのバージョンが違うものを複数設置してもよいのでしょうか?
最近jQueryに興味を持ち、サイトで公開されているプラグインを試しています。複数のスクリプトを実行させるとエラーが起こるため原因を探っているのですが、jQueryを使ったサイトを研究していてふと疑問に思ったことがあります。 とても初歩的な質問だと思うのですが、jQueryにはいろいろなバージョンがあるのでしょうか?jQuery 1.2.3や1.3.2などいくつか見たことがあります。それは単純に開発の段階で新しくバージョンアップされただけなのでしょうか?それとも全く別物なのでしょうか? それらの違うバージョンのjQuaryは共存することはできるのでしょうか? サーバーにいくつもアップロードして、ひとつのページで <script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="js/jquery-1.2.3.min.js"></script> などと、しても良いかという意味です。 また、共存できない場合、違うバージョンのjQuaryをダウンロードするように指示されている場合でも(プラグインの紹介サイト過去記事で表記が古い場合)、最新バージョンのjQuaryをアップロードしておけば正常に動くものなのでしょうか? よろしくおねがいします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>どちらのバージョンで動くか 後に読み込んだバージョンで動きます。 jQueryは中途半端にバージョンが混ざることがありません。 ただし、 jQuery.noConflict(); を実行すると、 ・変数「$」は先に読み込んだjQuery ・変数「jQuery」は後に読み込んだjQuery となります。 >プログラム上でバージョンを調べる jQuery.fn.jquery でバージョンが分ります。 大抵は新しいバージョンの方が機能が多く、バグも少ないのですが、 新バージョンで動かなくなるケースもいくつか確認しています。 大抵はプラグインのソースにちょっと手を入れれば 新バージョンのjQueryで動かすことはできると思います。 具体的にどう修正すればいいのかは、 プラグインを見てみないと分からないです。 それとは別に、プラグイン同士で衝突することもあるので、 プラグイン単体でどのバージョンで動くか把握しておくと 原因箇所をつかみやすいです。 プラグインが2つなら組み合わせは4通り ・jQuery-1.2.3.js -- プラグインA ・jQuery-1.2.3.js -- プラグインB ・jQuery-1.3.2.js -- プラグインA ・jQuery-1.3.2.js -- プラグインB ◎違うバージョン同士を結合する。 これでプラグインが正常に動くとは限りませんが、 こうすると違うバージョン同士を結合することができます。 <script type="text/javascript" src="jquery-1.2.3.js"></script> <script type="text/javascript" src="jquery-1.3.2.js"></script> <script type="text/javascript"> var $ = jQuery = jQuery.noConflict().extend(true, $); … </script> 共通するメソッドは、先に読み込んだ方が優先されます。 上の例ではjquery-1.2.3.jsがjquery-1.3.2.jsを上書きして、 jquery-1.3.2.jsからはjquery-1.2.3.jsに無いメソッドだけが残ります。
その他の回答 (1)
やってみないとなんともいえませんが、ライブラリで定義しているオブジェクト(jQueryオブジェクト)が上書きされるか改変されてしまうでしょうから、うまく動かないか、あるいは一番最後にロードされたものに上書きされて実質最後のバージョンとして動くか、どちらかじゃないでしょうか。 たいていの機能は、新しいバージョンで新たに追加されるか、前のバージョンとの互換性を保ちながら改良されるのが一般的ですので、ほとんどは最新版だけあれば動くはずです。もし動かないものがあれば、その作者のほうで何かアナウンスしているでしょう。ですから、まあ最新版だけあれば問題ないと思いますよ。
お礼
分かりやすい回答をありがとうございます。 バージョンの違うjQuaryを必要とする2つのプラグインを設置した場合に、両方とも動かなくなってしまったので、上書き、改変されて正規のjQuaryとは違うものになってしまっているのかもしれません。 最終的に、表示しているページでどのような内容のjQuaryがロードされているか確認する方法はあるのでしょうか? ひとまず、最新版だけロードして試してみます。
お礼
回答ありがとうございます。 早速、No1の方の回答も参考にいろいろと試してみました。 まず、jQuryのバージョンについてですが、例として「jquery-1.2.3.js」と「jquery-1.3.2.js」を出しましたが、実際は 「jquery-1.3.2.js」と「jquery-1.3.2.min.js」で、バージョンが違うものと思っていたのですが、再度調べているうちに、単にファイルサイズが小さいものだということが分かりました(この認識で合っていますでしょうか?)。 プラグインAとプラグインBの2つがあるとすると プラグインA→jquery-1.3.2.min.js プラグインB→jquery-1.3.2.js を使うようになっています。 プラグインB×jquery-1.3.2.jsは固定です。 事情があって他のものに変更することができません。 そこにプラグインAを投入するわけですが、 プラグインA×jquery-1.3.2.jsでは動きません 質問後に引き続き調べた結果、どうやらプラグインAをjquery-1.3.2.jsで動くようにするしかない様です。ファイルサイズを小さくしただけなら動くのでは?とも思うのですが・・・。
補足
>後に読み込んだバージョンで動きます。 jQueryは中途半端にバージョンが混ざることがありません。 仰るとおり、プラグイン×jquery-1.3.2.min.jsを一番後に読み込ませるとプラグインAのみ動きました。 ・・・と書いている間に、ふと、逆に一番前にもってきたらどうなるか試したら、動きました!AもBもどちらも動きました! ご回答いただいたお2人に感謝します。 今は想像だけでやってしまってるので、原理が分かる様に勉強しようと思います。ありがとうございました!