Mootools(joomla)+ jQuery + Firefox冲突:选择器错误

时间:2013-02-07 13:03:03

标签: jquery firefox joomla mootools

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

  • Joomla 1.5.23
  • jQuery 1.7.2
  • Mootools升级(Joomla插件)​​
  • Mootools 1.2.5
  • Firefox 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中的返回语句,它改变了本机行为。我不确定为什么仅在Firefox中出现问题,而不是Chrome等。

我很担心只是评论这段代码,因为我不太了解这个'mootools升级'插件,以及会有什么副作用。是否有人对上述内容足够熟悉才能解决问题?

更新

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

查看此Joomla插件 - http://extensions.joomla.org/extensions/core-enhancements/performance/jquery-scripts/18654 它将允许您使用带有noConflict的jQuery,因此您可以将它与Joomla 1.5中的Mootols一起使用。 祝你好运。