【发布时间】: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