我有一个小部件类型的js应用程序,它嵌入在许多网站中。我的小部件使用自己的jQuery和Bootstrap。有些网站也使用jQuery,但版本低于我在widget中使用的版本。
为了解决两个jQuery实例之间的冲突并使网站代码不知道我的jQuery,我添加了以下简单的逻辑:
// Backup websites jQuery objects
var websites$=$;
var websitesjQuery=jQuery;
var my$;
// Code for loading jQuery here...
function onjQueryLoad() {
my$=$.noConflict();
// Reverting jQuery variable objects to the one it was before loading my jQuery
$=websites$;
jQuery=websitesjQuery;
}
现在我想让bootstrap.min.js使用我的jQuery版本(保存在var my $中)。默认情况下,它使用预定义的jQuery变量。我想这样做是因为网站的jQuery太旧而且与引导程序不兼容。 我将感谢你的帮助。谢谢。
答案 0 :(得分:1)
这一切都取决于您加载脚本的顺序。您不需要任何这种逻辑,事实上$.noConflict
会为您完成大部分工作。
尝试做这样的事情
<script src="jquery_to_be_used_by_bootstrap.js"></script>
<script src="bootstrap.js"></script>
<script src="other_jquery_version.js"></script>
<script>
// 'true' tells it to restore *both* `$` and `jQuery`
// otherwise it just restores `$`
var website_$ = $.noConflict(true);
</script>
现在,$
和jQuery
(全局变量)将为jquery_to_be_used_by_bootstrap
,website_$
将为other_jquery_version
。
由于您无法编辑引导程序以告知其使用其他$
(或jQuery
)变量,因此您需要更新您的网站才能执行此操作。
这可以通过以下方式解决:
website_$(function($){
// Anything in here can use `$`
// and it'll be from `other_jquery_version`
});
答案 1 :(得分:0)
感谢Rocket提示&#34; 这完全取决于您加载脚本的顺序。&#34;,这解决了我的问题。
我在jQuery加载完成之后但在$ .noConflict()
之前放了bootstrap加载器// Code for loading jQuery here...
function onjQueryLoad() {
// Code for loading bootstrap.min.js here...
}
function onBootstrapLoad() {
my$=$.noConflict(true);
}