gpt4 book ai didi

javascript - 使用 getScript 在使用多个版本的 jQuery 的页面上导入插件

转载 作者:行者123 更新时间:2023-11-29 17:32:08 28 4
gpt4 key购买 nike

我正在使用 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.jQuerywindow.$ 指向它。所以你可以简单地加载旧的 jQuery,复制 window.jQuerywindow.jQuery126,加载新的 jQuery,复制 window.jQuerywindow.jQuery142,然后在您希望插件使用其他版本时更改 window.jQuerywindow.$

这是一个丑陋且不稳定的 hack,但它应该可以正常工作

  1. 为非默认版本编写的所有代码都用 (function($){...})($) 封装(适当的 jQuery 插件应该这样做,您可以轻松确保它用于您自己的代码)
  2. 用于不同 jQuery 版本的脚本不会混淆彼此的东西(例如一个绑定(bind)事件处理程序而另一个试图解除绑定(bind))

另一个更简单但不易维护的解决方案是简单地将插件编辑为 (function($){...})(jQuery142) 而不是 (function($) {...})(jQuery)

关于javascript - 使用 getScript 在使用多个版本的 jQuery 的页面上导入插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2830531/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com