【发布时间】:2016-12-04 20:47:33
【问题描述】:
我正在尝试克隆具有引导程序提供的数据切换行为的引导程序元素:
HTML
<div class="container">
<button aria-expanded="false" data-target="#collapsible_obj_0" data-toggle="collapse" class="btn btn-link collapsed">click here</button>
<div style="height: 0px;" aria-expanded="false" id="collapsible_obj_0" class="collapse">
<span>foo</span>
</div>
</div>
克隆后,我将 div 的 ID 更改为新的唯一 id,并将按钮的 data-target 指向 new div .
JS
var header = objectContainer.clone(true);
var counter = this.collapsibleObjCounter++;
var collapseId = "collapsible_obj_" + counter;
header.find(".collapse").attr("id", collapseId);
header.find("button[data-toggle='collapse']").attr("data-target", "#"+collapseId);
按钮和 div 是我正在克隆的对象容器的子级。
有时这可行,但有时我最终得到一个按钮,它仍然扩展和收缩原始 div,即使当我检查 HTML 时,ID 看起来是正确的。
我怀疑被复制的事件处理程序可能对要扩展和收缩的 div 的 id 的引用进行硬编码,这就是为什么仅修复 DOM 元素中的 ID 不起作用的原因。然而,这并不能解释为什么有些克隆可以工作,而另一些则不能。
克隆带有引导行为的东西的正确方法是什么?
因此,有几个答案指出,只需从我的 clone() 调用中删除 true 即可避免复制事件侦听器。所以我现在意识到我的问题比我在这里过分简化的问题要复杂一些。我将把它作为一个单独的问题来问。 (Cloning a Bootstrap element but not all of the event listeners)
【问题讨论】:
-
你能展示你的代码吗?
-
@jonju 我添加了用于修改克隆的 javascript。
-
以上代码中的objectContainer是什么?
-
collapsibleObjCounter是什么?如果您在某个循环中执行此操作,请提供克隆逻辑的完整代码块。这会很有帮助。谢谢 -
我试图创建一个 jsfiddle,但我无法让引导程序正常工作。 objectContainer 是一个包含按钮和另一个 div 的 div。 collapsibleObjCounter 只是一个计数器,一个全局变量,用于为每个新的折叠目标创建新的 ID
标签: javascript jquery twitter-bootstrap clone