2011-12-23 59 views
12

我想克隆表中的一行,但是当我克隆时,新元素的nameid将与它从中克隆的元素相同。是否可以使用新的ID和名称在jQuery中克隆HTML元素?

我需要的是与不同的nameid不同的克隆元素。

+2

答案是http://stackoverflow.com/questions/1339730/is-there-a-way-to-clone-elements-using-jquery。 – anson

+0

andbeyond链接到所有需要的答案。需要做20个?将这个答案包装在迭代器中,并将索引添加到ID或类似的东西。 –

回答

29

我会通过prop映射中的键/值对克隆后更新这些值:

$("#selector").clone().prop({ id: "newId", name: "newName"}); 

克隆元素在DOM,直到你加入他们,所以你不会不存在必须担心重复id s直到你这样做。

例子:http://jsfiddle.net/BbpRA/

更新:在你说的意见,你有你需要克隆20 input秒。我将创建一个接受DOM元素和新ID和名称的函数。你甚至可以做一个小插件出来的:

(function($) { 
    $.fn.cloneWithProperties = function (properties) { 
     return this.clone().prop(properties); 
    }; 
})(jQuery) 

用法:

$("#selector").cloneWithProperties({ id: "newId", name: "newName" }); 
+0

但我有近20个输入框,我必须克隆 –

+1

不应该是'.attr({...})'而不是?无论是id还是name都是属性。两者都是属性。 http://api.jquery.com/prop/ – techfoobar

+0

“attr”(而不是“prop”)会更“正确”,但这绝对是一种可行的方式。 –

1

你可以这样做:

var x = $("#selector").clone(); 

x.find('#oldID1').attr({id: "newID1", name: "newName1"}); 
x.find('#oldID2').attr({id: "newID2", name: "newName2"}); 
... 

其一旦完成,就可以追加x到哪里你要。

请注意,上面的#selector是指您的表格行元素。

6

你可以尝试这样的事:

<div class="container"> 
    <div class="goodbye"> 
    Goodbye 
    <div id="h1" class="hello">Hello</div> 
    </div> 
</div> 

$('#h1').clone().attr('id','h2').appendTo('.container'); 
0

您可以cloneJS自动化您的克隆。这只是一个测试版本:CloneJS