因此,我正在尝试在请求的限制范围内工作,并取得了一些进展,但仍然被锁定。这是场景:
目前,我正在使用依赖于jQuery v1.4.2的网站。由于我在后端给出的唯一访问是能够将内容注入到CMS驱动的页面中,因此我一直在加载jQuery 1.11以支持一些非常需要的功能。
闪回到昨天,我意识到客户端的开发团队现在捆绑了v1.4和v1.11,并且没有任何关联1.11进入$$。
(function() {
$$ = $.noConflict( true ); // Move jQuery 1.11.0 into $$ and restore $ to jQuery 1.4.2
})();
// Use the following self-invoking anonymous function
// when you need to run code that depends on $ = jQuery 1.11
// Otherwise, you can access jquery 1.11 with $$
// (function( $ ){
// inside here $ is jQuery 1.11
// and jQuery 1.4.2 is out of scope
// })( $$ );
由于我的脚本(以及我试图加载到页面中的插件)被注入页面中间,而jQuery v1.4和v1.11位于页面底部,我正在加载它方式:
(function checkForJquery(){
if ('$$' in window) {
(function($) {
console.log('success');
$.getScript("myplugin.jquery.js", function(){
$( ".devices").myplugin({
// devices - Array | productID
prop1: ["prod3960155", "prod3640151", "prod3640152", "prod5530141"],
prop2: "attribute",
prop3: "attribute"
});
});
})($$);
} else {
console.log('not yet');
window.setTimeout(checkForJquery, 1000);
}
})();
所以我遇到的问题是,如果我使用:
(function( $ ){})( $$ );
我什么也没得到 - 插件永远不会初始化。但是,如果我使用:
(function( $ ){})( jQuery );
它确实有效,但后来我无法访问最新的API。任何想法为什么会工作而不是另一个?
为了清楚起见,我正在使用jQuery插件Boilerplate,它的开头是这样的:
;( function( $, window, document, undefined ) { } )( jQuery, window, document );
任何见解都将非常感谢!
谢谢, 乔
答案 0 :(得分:2)
您的脚本无法工作的原因不是您对插件的调用,而是创建。
为了解释,下面的代码仅使用第二个实例$$
来搜索类.devices
的所有元素,并启动您的插件myPlugin
。没别了。
(function($) {
$(".devices").myplugin();
})($$);
但您已将您的插件注册到旧版本。当您在上面的代码中使用jQuery
而不是$$
时,这就是它的工作原因。
要在插件中使用$$
jQuery实例,您还必须在创建时设置它。但是你已经通过了jQuery
。因为您使用了noConflict
,所以名称jQuery
属于旧版本的jQuery。
要将插件注册到正确的实例,您必须在创建时将其更改为$$
。
;(function($, window, document, undefined){})($$, window, document);
要使插件适用于其他安装,您可以添加jQuery
作为后备广告。如果您在其他网站上也使用该插件并且不想每次都更改它,这将有所帮助。
;(function($, window, document, undefined){})($$ || jQuery, window, document);
多数民众赞成。