Мой подход немного другой.
Вместо того, чтобы изменять селекты во время клонирования, я просто наблюдаю за каждым select
на странице для события change
, а затем, если значение изменяется, я добавляю необходимый атрибут selected
к выбранному <option>
, чтобы он стал <option selected="selected">
. Поскольку выделение теперь помечено в разметке <option>
, оно будет пройдено, когда вы .clone()
сделаете это.
Единственный код, который вам нужен:
//when ANY select on page changes its value
$(document).on("change", "select", function(){
var val = $(this).val(); //get new value
//find selected option
$("option", this).removeAttr("selected").filter(function(){
return $(this).attr("value") == val;
}).first().attr("selected", "selected"); //add selected attribute to selected option
});
И теперь вы можете копировать select любым удобным для вас способом, и его значение тоже будет скопировано.
$("#my-select").clone(); //will have selected value copied
Я думаю, что это решение менее нестандартное , поэтому вам не нужно беспокоиться, если ваш код сломается, если вы что-то измените позже.
Если вы не хотите, чтобы он применялся к каждому выбору на странице, вы можете изменить селектор в первой строке, например:
$(document).on("change", "select.select-to-watch", function(){