2010-10-11 76 views
16

我想克隆一个<选择>输入HTML使用JQuery。
我不知道该怎么做,所以我想在这里问。JQuery克隆<select>元素

特别感兴趣的是将其写回文档的最佳方式。

我选择的元素看起来是这样的:

<select id="options"> 
    <option value="1">Opt 1</option> 
    <option value="2">Opt 2</option> 
    <option value="3">Opt 3</option> 
</select> 

感谢。

+1

注意:所选择的属性不会因在jQuery中的一个错误的复制。克隆后selectedIndex丢失。您必须再次手动设置选定的值。 http://bugs.jquery.com/ticket/9997它看起来像jQuery可能不会很快解决这个问题。祝你好运! – maartenmachiels 2014-09-03 08:09:46

回答

27

参见:http://api.jquery.com/clone/

$('select#options').clone().attr('id', 'newOptions').appendTo('.blah'); 

appendTo(...)只有一个插入克隆元素的方式。其他方法可以在这里找到:http://api.jquery.com/category/manipulation/

+0

谢谢,我已经通过两行破解了你的答案,因为我更喜欢那种方式。 – diggersworld 2010-10-11 13:45:44

+2

来自jquery克隆文档的注意事项,它不会克隆所选的任何内容:“出于性能方面的原因,某些表单元素的动态状态(例如,键入textarea的用户数据和用户选择)不会被复制当克隆输入元素时,元素的动态状态(例如,输入到文本输入中的用户数据和对复选框进行的用户选择)保留在克隆的元素中。“请参阅http://api.jquery.com/clone/ – dalore 2014-06-02 13:17:06

0

jQuery有一个clone内置的方法。如何添加克隆的元素有很多options。正确的选择取决于您的应用程序。

11

这个怎么样?

<select id="options"> 
    <option value="1">Opt 1</option> 
    <option value="2">Opt 2</option> 
    <option value="3">Opt 3</option> 
</select> 

//目标

<select id="options2"> 
</select> 

$('#options').find('option').clone().appendTo('#options2'); 

感谢。

9

接受答案的唯一问题是,如果您的选择包含optgroups,它们将不会被复制。在这种情况下,我发现的最简单的方法就是这样做:

$('#options2').html($('#options').html()); 
0

您可以attr选项选择真正的选择更改,然后使用克隆是好的。

$("#options").off("change").on("change", function() { 
 
    var val = $(this).val(); 
 

 
    $(this).find("option[value=" + val + "]").attr("selected", true); 
 
});

$("#options").off("change").on("change", function() { 
 
    var val = $(this).val(); 
 

 
    $(this).find("option[value=" + val + "]").attr("selected", true); 
 
});