如何克隆一个元素并一次插入多次?

时间:2012-05-03 06:24:55

标签: jquery insert clone

如何克隆元素并将其插入5次?这当然是基本陈述:

$('.col').clone().insertAfter('.col');

这是我需要得到的:

<div class="col" id="original"> </div>
<div class="col"> </div>
<div class="col"> </div>
<div class="col"> </div>
<div class="col"> </div>
<div class="col"> </div>

选择器不需要使用唯一的id,它也可以是类选择器。

我可以重复四次基本陈述,但必须有更优雅的方式吗?

6 个答案:

答案 0 :(得分:19)

使用循环,如下所示:

$(document).ready(function() {
    var e = $('.col');
    for (var i = 0; i < 5; i++) {
      e.clone().insertAfter(e);
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="col">clone me...</div>


在循环之前将元素放在一个变量中,否则当你得到几个具有相同id的元素时你会遇到问题你的选择器是基于一个id(例如$("#col1"))。

如果您的选择器正在使用类,它不会导致与重复ID相同的冲突,但您仍然应该在循环之前将该元素放在变量中,否则您将获得比您想要的更多元素

答案 1 :(得分:1)

<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.js"></script>
<script type="text/javascript">
 $(document).ready(function() {
    $('.col').each(function(){
        $(this).clone().insertAfter(this);
    }); 
  });  
</script>
 <div class="col">First div </div>
 <div class="col">2nd </div>
 <div class="col">3rd </div>
 <div class="col">4th </div>
 <div class="col">5th </div>

这是你要找的吗?

答案 2 :(得分:1)

我写了一个jQuery插件:

$.fn.multiply = function(numCopies) {
    var newElements = this.clone();
    for(var i = 1; i < numCopies; i++)
    {
        newElements = newElements.add(this.clone());
    }
    return newElements;
};

此代码段将元素构建为jQuery集,而不是多次添加到DOM,这可能很慢。

<强>用法:

var li = $('<li>Test</li>');
$('ul').append(li.multiply(4));

所以,举个例子:

$('.col').multiply(5).insertAfter('.col');

答案 3 :(得分:0)

Javascript数组有一个填充函数:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill

所以你可以写这样的东西

 $(
   new Array(copies).fill(function () { 
     return $(this).clone(); 
   }.bind(el))
   .map(function (el) {
     return el();
   })
 ).map(function() { return this.toArray(); }); //Turn into jQuery

如果你想把它作为一个可以重复使用的jQuery函数,你可以编写类似这样的东西

$.fn.multiply = function(amount) {
   var cloneFunction = (function() {
     return $(this).clone();
   }).bind(this);

   return $(
      new Array(amount).fill(cloneFunction).map(function(el) {
         return el();
      });
   ).map(function() { return this.toArray(); }); //Turn into jQuery
}

这使您可以灵活地将克隆的函数调用与仅在需要时进行评估分开。因此,如果您愿意,可以将电话分开并稍后进行评估。

意味着这是promise(它返回带有绑定上下文的函数,当被调用时将克隆)

new Array(amount).fill(cloneFunction);

这是决议

.map(function(el) { return el(); })

这个小小的最后一点处理了我创建了一个jQuery对象数组的事实,但实际上我想要一个jQuery集合

.map(function() { return this.toArray(); }); //Turn into jQuery

但无论如何,如果你走这条路,你的最终解决方案会是这样的。

$(el).multiply(amount).insertAfter(anotherEl);

欢呼声

答案 4 :(得分:0)

&#13;
&#13;
$(document).ready(function() {
    var e = $('.col');
    for (var i = 0; i < 5; i++) {
      e.clone().insertAfter(e);
    }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="col">clone me...</div>
&#13;
&#13;
&#13;

`

答案 5 :(得分:0)

您可能想在准备好文档时克隆字段,以防止克隆客户端所做的任何更改。这主要是输入方面的活跃问题。然后,您应该:

  1. 克隆文档准备就绪的元素:var elementClone = $('#element').clone()

  2. 在单击时再次克隆克隆的元素,然后添加elementClone.clone().insertAfter(element)

相关问题