如何在clone()操作期间删除所选元素

我有一个克隆的选择框。 我想从每个克隆的选择框中删除用户以前的选择。 这是执行clone()

 function addselect(s){ $('#product_categories > .category_block:last').after( $('#product_categories > .category_block:last').clone() ); set_add_delete_links(); return false; } function set_add_delete_links(){ $('.remove_cat').show(); $('.add_cat').hide(); $('.add_cat:last').show(); $("#product_categories > .category_block:only-child > .remove_cat").hide(); } function removeselect(s){ $(s).parent().remove(); set_add_delete_links(); return false; } 

这种方法有效,但不会删除最后选择的:

  $('#product_categories > .category_block:last option:selected').remove(); 

这是HTML

 
Select Attribute Foo0 Foo1 Foo2 Foo3 Foo4 Foo5 [-] [+]

您需要克隆正确的元素,为克隆设置选定的值,然后附加克隆。

 function addselect(s){ // Store the block in a variable var $block = $('#product_categories > .category_block:last'); // Grab the selected value var theValue = $block.find(':selected').val(); // Clone the block var $clone = $block.clone(); // Find the selected value in the clone, and remove $clone.find('option[value=' + theValue + ']').remove(); // Append the clone $block.after($clone); set_add_delete_links(); return false; } 

更新:修改为适合添加到问题的HTML。

请注意,正在克隆select元素的ID,这意味着您有2个具有相同ID的元素。 这是不允许的。 您需要删除ID,或将克隆中的ID更改为其他值。

在附加克隆之前,您可以执行以下操作:

  // Grab the select in the clone var $select = $clone.find('select'); // Update its ID by concatenating theValue to the current ID $select.attr('id', $select.attr('id') + theValue); 

您可以将克隆元素保存到您在DOM中插入之前操作的变量。 或者在插入后重新选择新的克隆元素并进行操作

请参阅在jQuery中取消选择