2010-10-11 33 views
16

Tôi muốn sao chép một đầu vào < chọn > trong HTML bằng cách sử dụng JQuery.
Tôi không chắc chắn làm thế nào để đi về nó, vì vậy tôi nghĩ rằng tôi muốn hỏi ở đây.Sao chép JQuery <select> phần tử

Đặc biệt quan tâm đến cách tốt nhất để ghi lại nó vào tài liệu.

yếu tố lựa chọn của tôi trông như thế này:

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

Cảm ơn.

+1

Chú ý: thuộc tính được chọn sẽ không được sao chép vì một lỗi trong jQuery. SelectedIndex bị mất sau khi sao chép. Bạn sẽ phải đặt lại giá trị đã chọn theo cách thủ công. http://bugs.jquery.com/ticket/9997 Dường như jQuery có thể không sửa lỗi này sớm. Chúc may mắn! – maartenmachiels

Trả lời

27

Xem: http://api.jquery.com/clone/

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

appendTo (...) chỉ có một cách để chèn các yếu tố nhân bản. Có thể tìm thấy các phương pháp khác tại đây: http://api.jquery.com/category/manipulation/

+0

Cảm ơn, tôi đã chia câu trả lời của bạn qua hai dòng vì tôi thích nó theo cách đó. – diggersworld

+2

Lưu ý từ các tài liệu trên bản sao jquery, nó sẽ không sao chép bất kỳ thứ gì đã được chọn: "Vì lý do hiệu suất, trạng thái động của các phần tử biểu mẫu nhất định (ví dụ: dữ liệu người dùng được nhập vào vùng văn bản và lựa chọn người dùng được thực hiện cho lựa chọn) không được sao chép Khi nhân bản các phần tử đầu vào, trạng thái động của phần tử (ví dụ, dữ liệu người dùng được nhập vào các đầu vào văn bản và các lựa chọn người dùng được thực hiện cho một hộp kiểm) được giữ lại trong các phần tử nhân bản. " xem http://api.jquery.com/clone/ – dalore

0

jQuery có sẵn phương pháp clone. Có rất nhiều options để biết cách thêm phần tử nhân bản vào. Lựa chọn thích hợp phụ thuộc vào ứng dụng của bạn.

11

Làm thế nào về điều này?

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

// nhắm mục tiêu

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

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

Cảm ơn.

9

Chỉ có vấn đề với câu trả lời được chấp nhận là nếu lựa chọn của bạn có chứa các nhóm chọn lọc, chúng sẽ không được sao chép. Trong trường hợp đó, cách dễ nhất tôi tìm thấy là chỉ cần thực hiện điều này:

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

bạn có thể tùy chọn attr được chọn đúng với thay đổi đã chọn, sau đó sử dụng bản sao là ok.

$("#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); 
 
});

Các vấn đề liên quan