将 jQuery 选择克隆到变量中并将其插入回 DOM
Clone jQuery selection into variable and insert it back into DOM
我做错了什么,难道不能将元素克隆到一个变量中,然后从那里将其插入回 DOM 中吗?
var clonedElements = $('.source .item').clone();
$('.target .item').each(function(index) {
$(this).after(clonedElements[0]);
});
通过始终在目标中存在的元素之后插入第一个元素来减少克隆数组。
您可以给 after()
克隆的元素,它将把它放在元素之后。如果您要在多个元素之后插入元素,它将执行额外的克隆作为 after()
逻辑的一部分。
$('.target .item').after($('.source .item').clone());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="source" style="display:none;">
<div class="item">New Source</div>
</div>
<div class="target">
<div class="item">Original Target</div>
<div class="item">Original Target</div>
<div class="item">Original Target</div>
<div class="item">Original Target</div>
<div class="item">Original Target</div>
</div>
我弄错了:
$(this).after(clonedElements[0]);
...不会从数组中删除元素,并且下一个元素不会再次获得新索引以供 [0] 访问,就像它们在对 jQuery 对象进行操作时那样:
$(this).after($('.source .item')[0]);
因此解决方案是将克隆转换为数组并在其上移动:
var items = $(".source .item").clone().toArray();
$('.target .item').each(function(index) {
$(this).after(items.shift());
});
我做错了什么,难道不能将元素克隆到一个变量中,然后从那里将其插入回 DOM 中吗?
var clonedElements = $('.source .item').clone();
$('.target .item').each(function(index) {
$(this).after(clonedElements[0]);
});
通过始终在目标中存在的元素之后插入第一个元素来减少克隆数组。
您可以给 after()
克隆的元素,它将把它放在元素之后。如果您要在多个元素之后插入元素,它将执行额外的克隆作为 after()
逻辑的一部分。
$('.target .item').after($('.source .item').clone());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="source" style="display:none;">
<div class="item">New Source</div>
</div>
<div class="target">
<div class="item">Original Target</div>
<div class="item">Original Target</div>
<div class="item">Original Target</div>
<div class="item">Original Target</div>
<div class="item">Original Target</div>
</div>
我弄错了:
$(this).after(clonedElements[0]);
...不会从数组中删除元素,并且下一个元素不会再次获得新索引以供 [0] 访问,就像它们在对 jQuery 对象进行操作时那样:
$(this).after($('.source .item')[0]);
因此解决方案是将克隆转换为数组并在其上移动:
var items = $(".source .item").clone().toArray();
$('.target .item').each(function(index) {
$(this).after(items.shift());
});