Optimizely A/B テスト サービスは.replaceWith("new HTML")
、簡単な A/B テストを作成するために広範囲に使用します。これには、新しい要素の ID/クラスが同じであっても、置き換えられた要素からのイベントをリッスンしていたイベント リスナーが削除されるという副作用があります。
例:
DOM には以下が含まれます。
<div class="something"> <button id="myButton"></button> </div>
傾聴者:
$("#myButton").click(function() { console.log('clicked!'); });
と取り換える:
$(".something").replaceWith("some new HTML, containing #myButton");
ステップ 3 の後#myButton
、元の DOM 要素が破棄され、新しい要素が追加されたため、 を押しても機能しなくなりました。
この問題を解決するための適切で「クリーンな」方法は何でしょうか?
可能な解決策
- コードベースを把握し、Optimizely の実験で適切なイベント リスナーを「再追加」します。
- 問題: A/B テスターは本当のソフトウェア開発者ではないかもしれません。これは面倒だと思います。
- とてもきれいな方法のようには見えません
Optimizely の後にコードを実行する方法を見つけ、その方法ですべてのイベント リスナーを追加します。これを行う良い方法はありますか?
ここで説明されているように、「$.on() を使用したイベント委任」を使用します: HTML を jQuery に置き換え、イベント バインディングを保持する方法
- 問題: 何を A/B テストして置き換えるかを正確に予測するのは難しい
編集: jQuery 1.11.xを使用しています