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



这是一个与以下特定软件版本相关的非常特殊且奇怪的错误:

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

请注意,这个bug可能比这表明的更广泛;这些只是我目前运行的版本。

在这种组合中,

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中生效。这也影响了对String.contains()进行类似调用的Element.hasClass函数。

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

升级jQuery至1.8.3版本。1.9(如果需要,带有迁移插件)。问题解决了吗?

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

最新更新