Использование разных версий jQuery и jQueryUI вместе
Я работаю над проектом, в котором их фреймворк использует jQuery 1.3.2 и jQueryUI 1.7.2.
Обновление версий в структуре не является возможным, поэтому я хотел бы параллельно запускать jQuery 1.4.4 и jQueryUI 1.8.5.
Я видел, что различные версии jQuery могут использоваться параллельно:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
var j$132 = $.noConflict(true);
</script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script type="text/javascript">
var j$144 = $.noConflict(true);
</script>
Но это также справедливо для следующего:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js"></script>
<script type="text/javascript">
var j$132 = $.noConflict(true);
</script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.min.js"></script>
<script type="text/javascript">
var j$144 = $.noConflict(true);
</script>
Ответы
Ответ 1
AFAIK, нет эквивалента $.noConflict()
для jQuery UI. Однако вы можете использовать локальную копию пользовательского интерфейса jQuery и обернуть весь JS, используя аналогичный трюк, который вы используете для сглаживания разных библиотек:
(function(jQuery) {
// ... the jQuery UI lib code for jQuery 1.3.2
})(j$132);
Это может быть элегантно реализовано с использованием серверной сборки script или обработчика, который обслуживает файлы JS, но обертывает содержимое указанным выше кодом.
Не тестировали этот подход, поэтому вам, возможно, придется возиться с параметром функции (хотя я считаю безопасным предположить, что он использует jQuery
для ссылки на jQuery в коде плагина).
Как вы это используете, объявите обе версии jQuery:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
var j$132 = $.noConflict(true);
</script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script type="text/javascript">
var j$144 = $.noConflict(true);
</script>
... и затем укажите свой код пользовательского интерфейса, как указано выше.
И нет, вы не можете этого сделать, ссылаясь на UI JS файлы из Google CDN.
РЕДАКТИРОВАТЬ: Второй блок кода в вопросе на самом деле является лучшим решением, чем этот ответ, поскольку он не требует обертывания исходного кода пользовательского интерфейса в функции самоисполнения и передачи конкретной версии, Оба подхода приводят к точному состоянию на странице.
Ответ 2
Я попал на эту страницу, потому что у меня такая же проблема, как описано в исходном вопросе, но ответ не полностью решает его (больше).
Мне нужно было добавить автоматическое предложение на страницу с большим количеством существующего кода с помощью jquery, не было простого способа просто обновить новый jquery и jquery ui, поэтому попытался использовать более новую версию рядом со старой.
Помимо редактирования последней строки jqueryui в jquery ui есть много ссылок jQuery, которые вам нужно изменить, поэтому я использовал редактор, который может заменить с помощью регулярного выражения и заменить:
\ BjQuery\б
с
J $182
An на странице, которую я добавил:
<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript">
var j$182 = $.noConflict(true);
</script>
<script type="text/javascript" src="jqueryui1.9.0.js"></script>
Теперь как существующие script на странице, так и новые подсказки автоматически работают.
Ответ 3
Я просто решил решение, и оно работает для меня.
В библиотеке JQuery после последнего типа строки
var mySelector = $;
Включите другую версию после ее включения на свою страницу.
теперь, во всех сценариях, которые вы хотите использовать с этой версией jquery (даже jquery ui и другими библиотеками тоже), замените $на mySelector. Используйте replaceall, там будет несколько мест, например, в функциях соответствия регулярных выражений, где вы захотите заменить mySelector на $. Эта проблема довольно долго меня раздражала. И он просто решил.
РЕДАКТИРОВАНО: убедитесь, что вы не замените никаких $внутри оригинала jQuery script.