これは、これらの特定のソフトウェアバージョンに関連する非常に特殊な(そして奇妙な)バグです。
- Joomla 1.5.23
- jQuery 1.7.2
- Mootoolsアップグレード(Joomlaプラグイン)
- Mootools 1.2.5
- Firefox 18.0.1
バグはそれが示唆するよりも広範囲に及ぶ可能性があることに注意してください。これらは私が現在実行しているバージョンです。
この組み合わせでは、
jQuery('.st');
次の3つの要素すべてに一致します。
<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などには問題がないのかわかりません。
この「mootoolsupgrade」プラグインとそれがもたらす副作用についてはよくわからないので、そのコードをコメントアウトするだけでは注意が必要です。上記のことを十分に理解していて、光を当てることができる人はいますか?
アップデート
OK、いくつかのデバッグの後、私は近づいています。バグSelectors.Filters.byClass
は、の動作に依存する関数に関連していますString.contains()
。もちろん、mootoolsはその機能をオーバーライドします-しかし、オーバーライドはChromeでのみ有効になるようです。Element.hasClass
これは、と同様の呼び出しを行う関数にも影響しますString.contains()
。