Как удалить выбранный элемент во время операции clone () - PullRequest
2 голосов
/ 21 мая 2010

У меня есть поле выбора, которое клонируется. Я хочу удалить предыдущий выбор пользователя из каждого клонированного окна выбора. Вот метод, который делает 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

<div id="product_categories">
<div class="category_block">
    <select name="category_ids[]" id="cat_list">
        <option  value="">Select Attribute</option>
        <option  value="1770">Foo0</option>
        <option  value="1773">Foo1</option>
        <option  value="1775">Foo2</option>
        <option  value="1765">Foo3</option>
        <option  value="1802">Foo4</option>
        <option  value="1766">Foo5</option>
    </select>
    <input class="specsinput" type="text" name="specs[]" value="" />
    <a href="#" onClick="return removeselect(this);" class="remove_cat"> [-] </a>
    <a href="#" onClick="return addselect(this);" class="add_cat"> [+] </a>
</div>

Ответы [ 2 ]

3 голосов
/ 21 мая 2010

Вам необходимо клонировать нужный элемент, установить выбранное значение для клона, а затем добавить клон.

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 клонируется, что означает, что у вас есть 2 элемента с одинаковым идентификатором. Это не разрешено Вам нужно будет избавиться от идентификатора или изменить его в клоне на другое значение.

Вы можете сделать что-то подобное, прежде чем добавить клон:

    // 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);
1 голос
/ 21 мая 2010

Вы можете сохранить клонированный элемент в переменную, которой вы управляете, прежде чем вставить его в DOM. или повторно выберите новый клонированный элемент после того, как он был вставлен, и выполните манипуляции

См. Лучший способ отменить выбор

...