Можно ли использовать 2 версии jQuery на одной странице?

ПРИМЕЧАНИЕ. Я знаю, что подобные вопросы уже заданы здесь и здесь, но я ищу для получения дополнительных разъяснений относительно того, как сделать эту работу или повод для ее полного устранения.

Я добавляю функциональность к существующему веб-сайту, который уже использует более старую версию библиотеки jQuery (1.1.3.1). Я писал свою добавленную функциональность против самой новой версии библиотеки jQuery (1.4.2). Я тестировал веб-сайт, используя только новую версию jQuery, и это нарушает функциональность, поэтому теперь я рассматриваю использование обеих версий на одной странице. Как это возможно?

Что мне нужно сделать в моем коде, чтобы указать, что я использую одну версию jQuery вместо другой? Например, я помещаю теги <script> для обеих версий jQuery в заголовок моей страницы, но что мне нужно сделать, чтобы я точно знал в своем кодовом коде, который я называю одной версией библиотеки или другой?

Возможно, что-то вроде этого:

//Put some code here to specify a variable that will be using the newer
//version of jquery:
var $NEW = jQuery.theNewestVersion();

//Now when I use $NEW, I'll know it the newest version and won't
//conflict with the older version.
$NEW('#personName').text('Ben');

//And when I use the original $ in code, or simply 'jquery', I'll know
//it the older version.
$('#personName').doSomethingWithTheOlderVersion();

ОБНОВЛЕНИЕ: после прочтения некоторых ответов, я начинаю задаваться вопросом, есть ли даже хорошая идея попробовать играть в эту игру вообще...

Ответ 1

Возможные? Да, так же, как можно запустить jQuery и другую структуру, которая одновременно использует имя $. Включите одну копию jQuery и назначьте ее новому имени с помощью noConflict, затем сделайте то же самое с другой копией.

Хорошая идея? Действительно нет, так же, как запуск jQuery и другой структуры в то же время не является хорошей идеей, только более того. jQuery - это далеко идущая, инвазивная структура. Если два экземпляра jQuery начинают мутировать один и тот же элемент (а версии jQuery до 1.4 очень беспорядочны в отношении того, к каким элементам они касаются), они, вероятно, будут путать друг друга с непредсказуемыми, чувствительными к времени и неуязвимыми побочными эффектами.

Если вообще возможно, обновление всего кода, запускаемого под последним jQuery, на сегодняшний день является лучшим маршрутом. Это действительно не должно быть так сложно; разработчики jQuery не очень сильно нарушили код, на который когда-либо приходилось полагаться.

Ответ 2

Для этого вы можете использовать метод jQuery noConflict.

<script type="text/javascript" src="jquery-1.1.3.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript">
    //Here, $ refers to the most recent jquery script loaded, which is version 1.4.2.
    $.noConflict();

    //Here, jQuery refers to 1.4.2 and $ refers to 1.1.3
    //You can setup an alias like so:
    var $NEW = jQuery;

    //Now, you can use old jQuery with $ and new jQuery with $NEW.
</script>

Ответ 3

Вы не должны делать этого, что когда-либо, $.noConflict() действительно не поможет вам во всех случаях.
Это связано с тем, что внутри jQuery использует псевдоним jQuery, поэтому забудьте о
любой знак доллара $ re-assinging... если вы будете использовать любой код, который использует jQuery следующим образом:
jQuery('div').doSomethingDepricated(), то он будет использовать последний определенный jQuery, загруженный на страницу. Теперь, если вы используете плагин, который работает только со старым jQuery и внутри
он написан только с использованием псевдонима jQuery (не $), тогда он сломается.

Если вы действительно хотите использовать 2 сценария jQuery с разными версиями, вы можете сделать
искать и заменять имя "jQuery" на одном из них и изменять его на что-то еще, то вы также можете повторно назначить ему любое имя псевдонима с помощью метода без конфликтов.

Ответ 4

Как расширение решения EndangeredMassa, я предлагаю следующую модификацию:

<script type="text/javascript" src="jquery-1.1.3.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript">
    //Here, $ refers to the most recent jquery script loaded, which is version 1.4.2.
    $.noConflict();

    //Here, jQuery refers to 1.4.2 and $ refers to 1.1.3
    //You can setup an alias like so:
    var $NEW = jQuery;

    // jQuery needs to refer to 1.1.3 again and not to 1.4.2
    var jQuery = $;

    //Now, you can use old jQuery with $ and new jQuery with $NEW.
</script>

Ответ 5

Исправьте старый код для работы с последней версией jQuery. Все остальное чрезвычайно хакерское и вызовет гнев всех разработчиков, которым, возможно, придется работать с вашим кодом в будущем на вас.