Mein Ansatz ist ein bisschen anders.
Stattdessen wählt während des Klonens zu modifizieren, gucke ich nur jeden select
auf Seite für change
Ereignis, und dann, wenn der Wert geändert wird, füge ich hinzu benötigt selected
Attribut ausgewählt <option>
so <option selected="selected">
wird es. Da die Auswahl jetzt in <option>
Markup markiert ist, wird es übergeben, wenn Sie .clone()
it.
Der einzige Code, den Sie benötigen:
//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
});
Und jetzt können Sie, wie Sie wollen kopieren auswählen und es wird es Wert zu kopiert haben.
$("#my-select").clone(); //will have selected value copied
Ich denke, diese Lösung weniger ist benutzerdefinierte so brauchen Sie sich keine Sorgen machen, wenn Ihr Code brechen, wenn Sie etwas später ändern werde.
Wenn Sie es nicht wollen alle auf Seite wählen angewendet werden, können Sie Wähler in der ersten Zeile wie ändern:
$(document).on("change", "select.select-to-watch", function(){
Wenn ich die val() auf dem ausgewählten Objekt verwenden, den Test nicht bestehen auch: \t-Test („Klon sollten Werte von ausgewählten behalten“, function() { \t \t var select = $ (“
Das ist ziemlich komisch, denn das funktioniert für mich in IE 6/7, Firefox 3 und Opera 9. Vielleicht stimmt etwas nicht mit deiner "Equals" -Funktion? alert (eval ('select = $ ("