这是一个与以下特定软件版本相关的非常特殊且奇怪的错误:
- 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一起使用它。祝你好运