外部加载了同一版本的jquery的两个不同变体



注意:这与两个不同版本的jQuery是不同的问题(这里提到的:我可以在同一页面上使用多个版本的jQuery吗?(。不同之处在于,这是两个版本号相同的jQuery副本,但外部源加载了不同的包含库,这意味着使用jquery调用的两个不同版本的正常解决方案不起作用

我在同一网站上有两个不同的jquery变体,由不同的来源加载。

一,当通过一条路径运行时,当我运行console.log(jQuery.fn.jquery);时:

3.4.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector

另一条路径返回

3.4.1

但是,两者都在系统上,路径主要影响加载顺序。问题变得更糟的是,以前的苗条版本似乎是加载时默认的版本,并且在我的应用程序外部加载。

所以问题是...一个缺少 Ajax,另一个没有,并且通过一条路径,Ajax 版本不起作用,因为 jquery 认为没有这样的函数。如何告诉它检查其他jquery 文件?

离开评论...

您可以使用立即调用的函数表达式 (IIFE( 来限定逻辑范围,也可以使用noConflict调用来解决此问题。 假设您有如下所示的内容。

<script src="locationOfNormalJQuery"></script> <!-- included by you -->
...html...
<script src="locationOfSlimJQuery"></script> <!-- included by app out of your control -->
<script>
...your logic...
</script>

"你的逻辑"只能访问第二个包含中包含的jQuery,因为每个jQuery包含都替换了全局window.jQuerywindow.$引用。 这可以通过两种可能的方式进行更改。

noConflict

<script src="locationOfNormalJQuery"></script> <!-- included by you -->
<script>
window.jQueryWithAjax = jQuery.noConflict();
</script>
...html...
<script src="locationOfSlimJQuery"></script> <!-- included by app out of your control -->
<script>
jQueryWithAjax.find(<whatever>);
</script>

IIFE方法

<script src="locationOfNormalJQuery"></script> <!-- included by you -->
<script>
(function($){
$(<whatever>);
}(jQuery));
</script>
...html...
<script src="locationOfSlimJQuery"></script> <!-- included by app out of your control -->

noConflict方法将以前版本的 jQuery 保存到一个辅助变量中,供以后使用。 IIFE 方法在第二个脚本包含发生之前移动逻辑,并将当前jQuery传递给它。 此时,IIFE 中的所有逻辑都将使用该$作为传入的版本,而不管它以后在window上如何更改。

想出了一个可能的解决方案:

由于后来加载的jQuery版本覆盖了早期版本的jQuery,我可以使用javascript通过jQuery.fn.jquery进行持续检查,并受到@Taplar解决方案的启发,以及对另一个问题的回答:监听JavaScript中的变量变化

我向window.jQuerywindow.$添加侦听器

在更改时,我检查jQuery.fn.jquery的结果,如果它与我想要的不同,我会用我想要的版本重新加载 jquery。(如果有人在我弄清楚之前发布了有关如何执行此操作的代码,他们会得到复选标记(。

相关内容

  • 没有找到相关文章

最新更新