每次点击jQuery clone div

时间:2016-12-19 07:13:13

标签: javascript jquery html css

我有一个简单的表单,并且有一个按钮可以在单击时克隆我的表单。问题是,当我第一次点击按钮时,它工作正常,但是在下次点击时会附加许多div。有没有办法每次点击一个一个地复制? 这是我的片段:



$(document).ready(function() {
    $(".Add").click(function() {
        $(".formi").clone().insertAfter(".formi:last");
    });
});

.formi {
    border: 1px solid #000;
    width: 50%;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<span class="Add">Add+</span>
<div class="all">
    <form class="formi">
        <input type="text" placeholder="name" />
        <select name="cars">
            <option value="">one</option>
            <option value="">two</option>
        </select>
        <button type="submit">ok</button>
    </form>
</div>
&#13;
&#13;
&#13;

9 个答案:

答案 0 :(得分:10)

您可以找到第一个表单,而不是使用eq(0)在DOM中查找所有表单或查找最近的表单,

$(document).ready(function(){
    $(".Add").click(function(){
		  $(".formi").eq(0).clone().insertAfter(".formi:last");
//$(".formi:last").clone().insertAfter(".formi:last");
    });
});
.formi{border:1px solid #000;width:50%;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<span class="Add">Add+</span>
<div class="all">
<form class="formi">
<input type="text" placeholder="name"/>
<select name="cars">
<option value="">one</option>
<option value="">two</option>
</select>
<button type="submit">ok</button>
</form>
</div>

答案 1 :(得分:4)

$(".formi").clone().克隆页面上提供的所有.formi元素。您只需要克隆通过模板附加的第一个.formi元素而不是.formi

$(".Add").click(function(){
    var $formTemplate = $(".formi:first");
    $formTemplate.clone().insertAfter(".formi:last");
});

答案 2 :(得分:2)

使用first()first()方法返回所选元素的第一个元素。

$(document).ready(function() {
  $(".Add").click(function() {
    $(".formi").first().clone().insertAfter(".formi:last");

  });
});
.formi {
	border: 1px solid #000;
	width: 50%;
}
<span class="Add">Add+</span>
<div class="all">
  <form class="formi">
    <input type="text" placeholder="name" />
    <select name="cars">
      <option value="">one</option>
      <option value="">two</option>
    </select>
    <button type="submit">ok</button>
  </form>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 

答案 3 :(得分:1)

您需要使用.eq()方法仅克隆第一个,这会将匹配元素集减少到指定索引处的元素。

请试试这个:

$(".formi").eq(0).clone().insertAfter(".formi:last");

参考文献:

$(document).ready(function() {
  $(".Add").click(function() {
    $(".formi").eq(0).clone().insertAfter(".formi:last");

  });
});
.formi {
  border: 1px solid #000;
  width: 50%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<span class="Add">Add+</span>
<div class="all">
  <form class="formi">
    <input type="text" placeholder="name" />
    <select name="cars">
      <option value="">one</option>
      <option value="">two</option>
    </select>
    <button type="submit">ok</button>
  </form>
</div>

答案 4 :(得分:1)

$(document).ready(function(){
    $(".Add").click(function(){
		$(".formi").eq(0).clone().insertAfter(".formi:last");
    });
});
.formi{border:1px solid #000;width:50%;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<span class="Add">Add+</span>
<div class="all">
<form class="formi">
<input type="text" placeholder="name"/>
<select name="cars">
<option value="">one</option>
<option value="">two</option>
</select>
<button type="submit">ok</button>
</form>
</div>

答案 5 :(得分:1)

$(document).ready(function() {
  $(".Add").click(function() {
    $(".formi:nth-child(1)").clone().insertAfter(".formi:last");

  });
});
.formi {
  border: 1px solid #000;
  width: 50%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<span class="Add">Add+</span>
<div class="all">
  <form class="formi">
    <input type="text" placeholder="name" />
    <select name="cars">
      <option value="">one</option>
      <option value="">two</option>
    </select>
    <button type="submit">ok</button>
  </form>
</div>

  1. 添加:nth-child(1),这样您就只能克隆第一个。

答案 6 :(得分:1)

$(document).ready(function(){
    $(".Add").click(function(){
		$(".formi:last").clone().insertAfter(".formi:last");

    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span class="Add">Add+</span>
<div class="all">
<form class="formi">
<input type="text" placeholder="name"/>
<select name="cars">
<option value="">one</option>
<option value="">two</option>
</select>
<button type="submit">ok</button>
</form>
</div>

答案 7 :(得分:1)

使用:nth-child(1)

&#13;
&#13;
$(document).ready(function(){
    $(".Add").click(function(){
		$(".formi:nth-child(1)").clone().insertAfter(".formi:last");

    });
});
&#13;
.formi{border:1px solid #000;width:50%;}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<span class="Add">Add+</span>
<div class="all">
<form class="formi">
<input type="text" placeholder="name"/>
<select name="cars">
<option value="">one</option>
<option value="">two</option>
</select>
<button type="submit">ok</button>
</form>
</div>
&#13;
&#13;
&#13;

答案 8 :(得分:1)

我有评论,你犯了错误,这将是什么可能的解决方案

$(document).ready(function() {
$(".Add").click(function() {
//Mistake : when you are clicking second time, you clone both the forms having class '.formi'
$(".formi").clone().insertAfter(".formi:last");

// $(".formi:nth-child(1)").clone().insertAfter(".formi:last"); : This one will work

  });
});