2015-10-22 3 views
3

У меня есть веб-приложение, использующее JQuery 1.6, это нельзя изменить. У меня есть программа просмотра D3, которая нуждается в версии по крайней мере 1.8. Я нашел решение следующим образом:Как эффективно использовать 2 версии JQuery?

<script src='link to jquery 1.10' type="text/javascript"></script> 
<script src='link to jquery custom 1.10' type="text/javascript"></script> 

var jQuery_1_8_2= $.noConflict(true); 

Так где использование «$», я теперь использовать "jQuery_1_8_2.

Это отлично работает, но у меня есть плагин JStree.

Что мне нужно, это функция, которая в основном при запуске зрителя изменяет каждое использование JQuery на более новую версию. Поэтому мне не нужно входить в исходный код плагина и менять каждый символ «$» на «jQuery_1_8_2».

+0

вы можете предоставить простой пример? как это работает и что вы хотите? Как вы используете jstree? – Grundy

+0

@Grundy это займет некоторое время, я не думаю, что вам нужно знать, как работает плагин. Мне просто нужен способ вместо использования переменной, поскольку jquery no conflict мне нужно иметь способ сказать, после того, как я вызываю это каждый раз, когда я использую '$', использую более новую версию jquery – thatOneGuy

+0

, я думаю, что вы просто используете плагин неправильно, обычно jquery-плагины создают с функцией с параметрами, такими как 'function ($, ...)' и вызывающая строка 'plugin (jQuery)' so '$' внутри плагина - может быть не такой, как снаружи. Итак, как вы включаете и используете/устанавливаете jstree? – Grundy

ответ

3

Вы можете заказать файлы JS таким образом, что, когда JSTree нагрузки существует только одна версия JQuery доступен, он получает объект JQuery только один раз, так что нет никаких проблем изменения значения глобальной $ \ jQuery после его загрузки ,

<script src="jquery_for_jstree.js"></script> 
<script src="jstree.js"></script> 
<script> 
var jsTreeJquery = $.noConflict(true); 
</script> 
<script src="another_jQuery.js"></script> 
<script> 
    jsTreeJquery ("...").jstree(...) 
</script> 

Вы можете увидеть этот подход работает на http://jsfiddle.net/npd3kc5t/

Это работает, потому что JSTree следует совету JQuery из protecting alias and adding scope.

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

+0

это замечательно. Я, очевидно, не понял плагин правильно. Однако, когда я пытаюсь вызвать jstree: "" "$ jQuery_1_11_3 (" # list "). Jstree ({" plugins ": [" wholerow "," checkbox "," sort "," search "," state "]}) ; "" "" Я получаю ошибку: "" "" $ jQuery_1_11_3 (...). jstree не является функцией "" "" – thatOneGuy

+0

Моя переменная $ jQuery_1_11_3. И im с использованием версии JQuery 1.11.3. – thatOneGuy

+1

вы должны просмотрите ваш заказ загрузки jquery/js – Luizgrs

0

Использование JQuery нет конфликта

//new version 
var newJquery = jQuery.noConflict(); 
//call it like this 
newJquery('#example').on('click')...... 

Для старого сделать samething

var oldJquery = jQuery.noConflict(); 
Смежные вопросы