我有一个Django formset,它有很多表单元素。我有一个工作方法来创建一个新的空表单,但我还需要一个复制表单的解决方案。从技术上讲,所有形式都在div中,如下所示:
<form>
...
<div class="subform">
...
</div>
...
</form>
问题是,在最新的jQuery版本中,html和replaceWith方法不处理输入值,因此它们创建空表单元素 - 这不是我需要的行为。当然,我可以实现一个迭代所有元素的算法,复制它们并设置它们的值,但是如果可能的话我想避免它。
我想用复制的值替换现有表单。
答案 0 :(得分:3)
是的,可以使用clone()和replaceAll()代替html()
/ replaceWith()
。 clone()
将保留value
元素的<input>
属性,甚至可以保留事件处理程序和自定义数据。
你可以这样写:
var theForm = $("selector-matching-your-form");
theForm.clone(true).replaceAll(theForm);
答案 1 :(得分:0)
Frédéric有一个很好的答案,我花了一段时间来理解它。这是一个不同的版本:
创建一个引用元素的变量。
var someElement = $("input#some-element");
克隆元素
var cloneOfElement = $someElement.clone(true);
使用克隆替换原始元素,方法是使用引用原始元素的变量。
cloneOfElement.replaceAll( $someElement );
-
来自replaceAll()文档: “.replaceAll()方法类似于.replaceWith(),但源和目标相反。”