Я знаю, что мой вопрос похож на многие другие, но я надеюсь, что особенности достаточно разные, чтобы оправдать новый вопрос.Сайт Joomla, над которым я работаю, использует mod_superfishmenu.Это загружает JQuery 1.2.6.и расширяет его.Я создаю компонент, который использует плагин jQuery colorbox, который требует jQuery 1.3 или выше и снова расширяет JQuery.Один из способов получить оба - переназначить jQuery на другое имя с помощью jQuery.noConflict ().Например,
<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>
, а затем измените все экземпляры jQuery в коде JavaScript для colorbox на jQuery1 и убедитесь, что все это загружается до того, как модуль superfish загрузит свой jQuery.Но мне не нравится редактировать код colorbox или вспоминать его, если я обновляюсь до более новой версии.Итак, я подумал, что сначала можно загрузить более старый jQuery, затем использовать jQuery.noConflict (true), чтобы переименовать его, затем загрузить текущий jQuery и перенести плагины, присоединенные к первому 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>
Кажется, это работает, но я обеспокоен тем, что пропустил некоторые детали, которые могут укусить меня позже.Так что, если кто-то видит недостаток в этом подходе, пожалуйста, укажите на это.Я также приветствую любую критику, которая показывает, почему это плохая идея.Спасибо.