Javascript 使用jQuery克隆DIV

Javascript 使用jQuery克隆DIV,javascript,jquery,html,Javascript,Jquery,Html,我有以下Javascript: $("div.duplicate-fields:last-child").clone().find('input').each(function() { this.name = this.name.replace(/\[(\d+)\]/,function(str,p1){return '[' + (parseInt(p1,10)+1) + ']'}); this.value = ""; this.checked = false; }).re

我有以下Javascript:

$("div.duplicate-fields:last-child").clone().find('input').each(function() {
    this.name = this.name.replace(/\[(\d+)\]/,function(str,p1){return '[' + (parseInt(p1,10)+1) + ']'});
    this.value = "";
    this.checked = false;
}).removeClass("active").end().appendTo("#duplicate-section");
函数中单击()。这个很好用。但是,我在克隆区域中有以下HTML:

<div class="btn-group" data-toggle="buttons"><label class="btn btn-default button-array "><input type="checkbox" name="select-sessions[3][1]" value="">Session 1</label>
<label class="btn btn-default button-array "><input type="checkbox" name="select-sessions[3][2]" value="">Session 2</label>
<label class="btn btn-default button-array "><input type="checkbox" name="select-sessions[3][3]" value="">Session 3</label>
<label class="btn btn-default button-array "><input type="checkbox" name="select-sessions[3][4]" value="">Session 4</label>
<label class="btn btn-default button-array active"><input type="checkbox" name="select-sessions[3][5]" checked="" value="">Session 5</label>
</div>
请注意,在第一个函数中添加了新的
find()
函数。然而,它似乎完全从克隆中删除了所有HTML,我最后只使用了几个输入框,仅此而已。我不明白为什么

在此图像中,您可以看到第一个克隆区域,然后在按下按钮后(添加了新的
find()
函数,如上所示):


帮我堆叠溢出,你是我唯一的希望。

你缺少一个
.end()

因此,您对第一个选择(输入)进行操作,这意味着您没有将克隆的div.duplicate-fields附加到#duplicate节,而是将输入集合附加到#duplicate节(这解释了五个复选框)

试着用这个替换你的第二块

$("div.duplicate-fields:last-child").clone().find('input').each(function () {
    this.name = this.name.replace(/\[(\d+)\]/, function (str, p1) { return '[' + (parseInt(p1, 10) + 1) + ']' });
    this.value = "";
    this.checked = false;
}).end().find("label.button-array.active").each(function () {
    $(this).removeClass("active");
}).end().appendTo("#duplicate-section");

Bootply-

尝试以下方法:

$(“div.duplicate-fields:last child”).clone().find('input').each(function(){
this.name=this.name.replace(/\[(\d+)\]/,函数(str,p1){return'['+(parseInt(p1,10)+1)+']});
此值为“”;
此项检查=错误;
$(this.parent(“label.button array.active”).removeClass(“active”);
}).removeClass(“active”).end().appendTo(“复制节”);

因为已经在循环每个输入元素,所以可以尝试使用$.parent()获取标签,然后编辑其类

差不多

$("div.duplicate-fields:last-child").clone().find('input').each(function() {
    this.name = this.name.replace(/\[(\d+)\]/,function(str,p1){return '[' + (parseInt(p1,10)+1) + ']'});
    this.value = "";
    this.checked = false;
    $(this).parent().removeClass("active");
}).end().appendTo("#duplicate-section");

请提供一个小提琴像你有问题。谢谢!这很有效。我没有把它标记为答案,因为它没有解释为什么会发生。但是非常感谢你的帮助。这很有效,也解释了为什么我的第一次尝试没有成功。我怀疑我需要这样的东西,但我没有足够的
find()。非常感谢。如果你也能解释一下上面的图片,以及为什么我会得到这些结果,那就太好了。完成(第二段),如果不清楚,请告诉我。干杯
$("div.duplicate-fields:last-child").clone().find('input').each(function() {
    this.name = this.name.replace(/\[(\d+)\]/,function(str,p1){return '[' + (parseInt(p1,10)+1) + ']'});
    this.value = "";
    this.checked = false;
    $(this).parent().removeClass("active");
}).end().appendTo("#duplicate-section");