【问题标题】:Using different versions of jQuery on the same page在同一页面上使用不同版本的 jQuery
【发布时间】:2011-03-04 22:44:20
【问题描述】:

我的服务的用户在我提供的页面中包含一个 JS。我正在托管他们包含的脚本。我的脚本对其内容进行了一些操作。如果我可以使用 jQuery,我已经厌倦了编写自己的 DOM 操纵器/选择器并浪费时间来完成可以用 1 行代码完成的工作。

我的服务的一些用户已经在他们的页面上使用了 jQuery(或 Prototype 等),所以如果我包含 jQuery,就会发生冲突。因为会有版本差异,所以我不想使用他们的 jQuery 选择器,在 jQuery 存在的情况下使用方法。

请记住,我无法控制他们的页面,如何包含 jQuery 并避免冲突?

【问题讨论】:

    标签: jquery jquery-selectors


    【解决方案1】:

    短版:你不能

    两次包含 jQuery 会导致各种问题,最大的问题是它会删除您添加的任何插件/功能。此外,它可能会为 他们 使用 jQuery 带来很多问题......它的设计并没有考虑到多个版本。

    .noConflict() 适用于其他 库冲突,但您不必担心这里的$,您正在重新定义jQuery 对象,那是问题突然出现。例如,它在启动时安装处理程序等,如果它被页面中的另一个版本覆盖......嗯,呃,很快就会出现问题。

    另一个很好的例子:事件被存储/访问$.data(elem, 'events'),它使用$.cache(另外,在这个页面上打开一个控制台,检查一下),将被重新定义,失去事件处理程序,以及随之而来的理智:)

    【讨论】:

    • 哦不 :( 对我来说是个坏消息
    • @nimcap - 你在做什么?我从来没有说过没有一些更简单的方法:)
    • 有几个部分。首先,我遍历 DOM 并将几个节点的类、名称、id 等存储在一个变量中,以供以后操作。其次,我进行 DOM 操作。我根据一些规则改变了他们页面中一些元素的外观。有时我会添加一些元素。我几乎完成了 JS 框架提供的所有基本操作。
    • @nimcap - 你可以重命名 jQuery 我猜,看看这里的核心底部:github.com/jquery/jquery/blob/master/src/core.js 你可以将 window.jQuery = window.$ = jQuery; 更改为 window.myQuery = jQuery; (jQuery在那一行是闭包的本地)......我不能保证任何事情,这可能(可能)有一些副作用。
    • 使用这个解决方案怎么样? stackoverflow.com/questions/528241/…
    【解决方案2】:

    主要是我需要选择器,所以前几天我偶然发现了这个:Sizzle,一个纯 JavaScript CSS 选择器引擎,旨在轻松放入主机库。

    它可用于避免与任何其他 Sizzle 实例发生冲突。我很高兴找到了这个解决方案。

    【讨论】:

    • 我知道这是旧的,但我想补充一点,jQuery 实际上在内部使用 Sizzle 作为它自己的选择器引擎。
    【解决方案3】:

    为此,您首先添加第一个 jQuery 版本,例如:scr="/jquery-1.2.3.js" 然后在它下面添加:

    var jq123 = jQuery.noConflict(true);

    所以从现在开始,要调用这个 jQuery 版本,而不是“$”,使用“jq123”,例如,我想使用这个版本的 jQuery 调用 Lavalamp 菜单功能,我会这样做:

        jq123(function() {
    
            jq123("#1, #2, #3").lavaLamp({
    

    });

        });
    

    而不是: $(函数() {

            $("#1, #2, #3").lavaLamp({
    

    });

        });
    

    然后,您添加其他版本的 jQuery 而不做任何更改,例如:您将使用“$”符号正常调用其中的函数。 我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-06
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      相关资源
      最近更新 更多