【问题标题】:Mootools (joomla) + jQuery + Firefox conflict: selector bugMootools (joomla) + jQuery + Firefox 冲突:选择器错误
【发布时间】:2013-02-07 13:03:03
【问题描述】:

这是与这些特定软件版本相关的一个非常具体且奇怪的错误:

  • Joomla 1.5.23
  • jQuery 1.7.2
  • Mootools 升级(Joomla 插件)
  • Mootools 1.2.5
  • 火狐18.0.1

请注意,该错误可能比所暗示的更广泛;这些只是我目前正在运行的版本。

在这种组合中,

jQuery('.st');

匹配以下所有三个元素:

<p class="test">one</p>
<p class="st">one</p>
<p class="stellar">one</p>

我已将原因从 mootools 脚本中分离出来:

Native.implement([Element, Document], {
    getElementsByClassName: function(className){
        MooTools.upgradeLog('1.1 > 1.2: Element.filterByTag is deprecated.');
        return this.getElements('.' + className);
    },

    getElementsBySelector: function(selector){
        MooTools.upgradeLog('1.1 > 1.2: Element.getElementsBySelector is deprecated. Use getElements()');
        return this.getElements(selector);
    }
});

具体来说,是 getElementsByClassName 中的 return 语句改变了本机行为。我不确定为什么只在 Firefox 中存在问题,而不是在 Chrome 中。

我对仅仅注释掉该代码持谨慎态度,因为我不太了解这个“mootools 升级”插件,也不知道它会产生什么副作用。是否有人对上述内容足够熟悉以能够阐明任何启示?

更新

好的,经过一些调试,我越来越接近了。该错误与Selectors.Filters.byClass 函数有关,该函数取决于String.contains() 的行为。当然,mootools 覆盖了该功能 - 但是覆盖似乎只在 Chrome 中生效。这也会影响Element.hasClass 函数,该函数对String.contains() 进行类似调用。

【问题讨论】:

    标签: jquery firefox joomla mootools


    【解决方案1】:

    解决方案:升级到 Joomla 1.5.26 以获得最新的安全性

    将 jQuery 升级到最低 1.8.3。 1.9(如果需要,使用 migrate 插件)如果可能的话。问题解决了吗?

    【讨论】:

    • 一会儿我会回答你的问题。 (升级 jQuery 不是一个大问题,但升级 Joomla 至少会出现问题。我继承的代码库已经进行了相当大的修改,我对升级并不是非常有信心成功。)
    • 而且,正如您从我的更新中看到的那样,这看起来很像 mootools/mootools 升级/Firefox 问题。
    【解决方案2】:

    查看这个 Joomla 插件 - http://extensions.joomla.org/extensions/core-enhancements/performance/jquery-scripts/18654 它可以让你使用没有冲突的 jQuery,这样你就可以在 Joomla 1.5 中将它与 Mootols 一起使用。 祝你好运。

    【讨论】:

    • 我已经在调用 noConflict() - 这只是释放了 $ 变量的使用,供其他库(例如 MooTools)使用。这不是这里的问题——它比那更“根深蒂固”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多