这是与这些特定软件版本相关的一个非常具体且奇怪的错误:
- 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);
}
});
具体来说,是 return 语句getElementsByClassName
改变了本机行为。我不确定为什么只在 Firefox 中存在问题,而不是在 Chrome 中。
我对仅仅注释掉该代码持谨慎态度,因为我不太了解这个“mootools 升级”插件,也不知道它会产生什么副作用。是否有足够熟悉上述内容的人能够阐明任何观点?
更新
好的,经过一些调试,我越来越接近了。该错误与Selectors.Filters.byClass
取决于String.contains()
. 当然,mootools 覆盖了该功能 -但覆盖似乎只在 Chrome 中生效。这也会影响对Element.hasClass
进行类似调用的函数String.contains()
。