- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 jQuery 1.2.6 的页面上开发一个应用程序,但我想为我的应用程序使用 jQuery 1.4.2。我真的不喜欢像这样使用多个版本的 jQuery,但页面 (1.2.6) 上的副本是我无法控制的。我决定像这样隔离我的代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<script type="text/javascript" src="jquery-1.2.6.min.js>
<script type="text/javascript" src="pageStuff.js"></script>
</head>
<body>
Welcome to our page.
<div id="app">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="myStuff.js"></script>
</div>
</body></html>
文件 myStuff.js 有我自己的代码,应该使用 jQuery 1.4.2,它看起来像这样:
(function($) { //wrap everything in function to add ability to use $ var with noConflict
var jQuery = $;
//my code
})(jQuery.noConflict(true));
这是一个极其简化的版本,但我希望您能理解我所做的事情。有一段时间,一切正常。但是,我决定在单独的文件中使用 jQuery 插件。我测试了它,它表现得很有趣。经过一些实验,我发现当我想让它使用新版本时,插件使用的是旧版本的 jQuery。有谁知道如何从包装 myStuff.js 代码的函数的上下文中导入和运行 js 文件?
万一这对任何人来说都很重要,这里是我如何知道插件使用的是旧版本,以及我为解决问题所做的工作:我制作了一个名为 test.js 的文件,其中包含以下行:
alert($.fn.jquery);
我尝试在 myStuff.js 下面以通常包含外部 Javascript 的方式在脚本标记中引用文件,结果如我所料,出现了 1.2.6。然后我摆脱了那个脚本标签并将这一行放在 myStuff.js 中:
$.getScript("test.js");
它仍然以 1.2.6 的形式返回。根据jQuery's documentation,这并不是什么大惊喜,以这种方式包含的脚本在全局上下文中执行。然后我尝试这样做:
var testFn = $.proxy($.getScript, this);
testFn("test.js");
它仍然以 1.2.6 的形式返回。经过一些修改,我发现“this”关键字指的是窗口,我假设它指的是全局上下文。我正在寻找一些东西来代替“this”来引用封闭函数的上下文,或者其他一些方法来使文件中的代码从封闭函数运行。我注意到如果我复制并粘贴代码,它工作正常,但它是一个在很多地方使用的大插件,我不想用他们的代码弄乱我的文件。我没主意了。还有其他人知道该怎么做吗?
最佳答案
当您加载 jQuery 时,它所做的只是创建一个根 jQuery 对象并设置 window.jQuery
和 window.$
指向它。所以你可以简单地加载旧的 jQuery,复制 window.jQuery
到 window.jQuery126
,加载新的 jQuery,复制 window.jQuery
到 window.jQuery142
,然后在您希望插件使用其他版本时更改 window.jQuery
和 window.$
。
这是一个丑陋且不稳定的 hack,但它应该可以正常工作
(function($){...})($)
封装(适当的 jQuery 插件应该这样做,您可以轻松确保它用于您自己的代码)另一个更简单但不易维护的解决方案是简单地将插件编辑为 (function($){...})(jQuery142)
而不是 (function($) {...})(jQuery)
关于javascript - 使用 getScript 在使用多个版本的 jQuery 的页面上导入插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2830531/
假设我有“main.js”,在“main.js”中我使用 $.getScript() 加载“secondary.js” “main.js”内部有一个名为 function runme() 的函数。 有
我正在尝试使用获取 Google map 脚本的 $.getScript 函数加载两个脚本,然后加载后,我会得到另一个脚本 ( goMap ),这使得 map 小程序变得容易待制作。 但是,加载时,获
getScript docs说说成功回调: “一旦脚本加载但不一定执行回调就会被触发。” 但在我的测试中,这似乎并不正确。对于具有以下内容的主机页: var startTime = new Date(
单击后,将加载以下内容: $.getScript('/javascripts/contacts.js'); 我怎样才能写出这样的声明 如果上面的 getScript 已经加载,执行 X,如果没有加载,
我正在编写一个需要广泛使用 getScript 的引擎。为了便于使用,我已将其插入其自己的函数中,但现在我需要确保函数本身是同步的。不幸的是,我似乎无法让 getScript 等到它加载的脚本实际完成
我在网上找到了一些代码,可以帮助我向客户提供小部件。我对下面完整代码的理解是,它首先检测 jQuery 是否存在,否则加载它。作为我的小部件的一部分,我还想确保 fancybox 已加载,因为我基本上
如果我有 2 个 JS 文件,例如 a.js 和 b.js a.js $.getScript('some.js',function(){ //Call some function in some
为了加快网站的加载时间,我们推迟了某些脚本的加载。直到几天前,这一直运行良好。我已将问题归结为这个简短的 HTML 页面。
我正在尝试从中获取回调: $.getScript( 'http://gdata.youtube.com/feeds/api/videos/?v=2&alt=json-in-script', funct
我正在尝试加载具有如下函数的脚本: $.getScript('/js/mymy.js').done(function(){ if(readCookie('my_cookie', 'yes'))
我的 jquery getScript 函数有一个“imho”奇怪的问题。 $.getScript('jquery_ui.js', function (){}); // this code works
我对 Javascript 相当陌生,并且在 $.getScript 调用中未执行代码时遇到问题。我已经引用了Using $.getScript (jquery): code is not execu
由于 WordPress 在非冲突模式下加载 jQuery,我必须将脚本包装在 jQuery(function($){...}) 父脚本按预期执行。但是,我通过 getScript 有条件地加载第二个
是否可以将变量发送到使用 $.getScript 加载的脚本? 目前我有: $.getScript( "js/my_script.js", function() { // do something h
永远不会调用 jQuery getScript 失败函数。看看这个 fiddle : http://jsfiddle.net/getsetbro/8xNMs/ $.getScript("http://
我有一个外部 JavaScript 可以这样调用: 根据getScript,调用将是: $.getScript("https://ndd.com/script.js", function(data,
我知道代码有什么问题,但我无法理解为什么 jquery 会那样做,所以让我用下面的代码解释我的问题 test.html ############# Button test MAIN
我有一个设置函数,我想这样使用: async function setup() { // Load the TF libs, then on complete - create t
我正在尝试使用 getScript 在本地加载 javascript 文件,但它返回 404 错误。 test.js - 我正在尝试加载的脚本: var hello = function(){
var json.script 是一个数组。每个元素都是一个脚本路径,我想通过 $.getScript 加载它。它应该看起来像这样 - 但我不知道如何循环数组以获取每个数组元素: $.when(
我是一名优秀的程序员,十分优秀!