Можно ли использовать 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.
Все остальное чрезвычайно хакерское и вызовет гнев всех разработчиков, которым, возможно, придется работать с вашим кодом в будущем на вас.