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() 的事件委托”,如下所述:how to replace HTML with jQuery but keep event bindings
- 问题:很难预测 A/B 测试和替换的具体内容
编辑: 我正在使用 jQuery 1.11.x