私の質問は他の多くの人と似ていますが、詳細は新しい質問を正当化するのに十分であることを願っています。私が取り組んでいるjoomlaサイトは、mod_superfishmenuを使います。これはjQuery 1.2.6をロードします。それを伸ばす。私は、jQuery 1.3またはそれ以上を必要とするjQueryカラーボックス・プラグインを使用するコンポーネントを作成しており、JQueryを再拡張しています。両方を持つ1つの方法は、jQuery.noConflict()を使用して別の名前にjQueryを再割り当てすることです。例えば、 JoomlaのサイトでjQueryの名前を変更せずに複数のjQueryバージョンを使用する
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js'>
</script>
<script type='text/javascript'>
var jQuery1 = jQuery.noConflict(true);
</script>
、その後はjQuery1にカラーボックス用のJavaScriptコードではjQueryのすべてのインスタンスを変更し、SUPERFISHモジュールはjQueryのをロードする前に、必ずこのすべての負荷を作ります。しかし、私はカラーボックスのコードを編集したり、新しいバージョンにアップグレードすると再び編集するのを忘れてしまいます。だから、古いjQueryをロードしてからjQuery.noConflict(true)を使って名前を変更し、現在のjQueryをロードし、最初のjQueryに接続されているプラグインを2番目のjQueryに転送することができると考えました。コピープラグインは次のようになり一部は:
<script type='text/javascript'>
var oldJquery = null;
if (jQuery != undefined) {
oldJquery = jQuery.noConflict(true);
}
</script>
<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js'>
</script>
<script type='text/javascript'>
jQuery.noConflict();
if (oldJquery) {
for (plugin in oldJquery.fn) {
if (!(plugin in jQuery.fn))
jQuery.fn[plugin] = oldJquery.fn[plugin];
}
}
</script>
これが動作しているようですが、私は後で私をかむことができますいくつかの詳細を見落としてきたことを心配します。だから誰かがこのアプローチの欠陥を見たら、それを指摘してください。なぜこれが悪い考えであるかを示す批判も歓迎します。ありがとう。
jQuery 1.3を使用するだけでいいですか?これはすべての1.2.6の機能も提供するはずです。 – iHaveacomputer
私は本当に複数のjQueryバージョンの読み込みに対してアドバイスします。これによりページの読み込み時間が増加するだけでなく、問題を尋ねているだけです。 –
@ iHaveacomputer、それはjQuery 1.2.6をロードするjoomlaモジュールです。私はjQuery 1.3をモジュールのjavascriptディレクトリに置くことができましたが、もう一度標準の(古くなっていれば)モジュールを変更しない方がいいです。 – yitwail