2015-01-16 6 views
-3

Я использую JQuery 1.11.1. У меня есть два отдельные элементы меню, одна из которых содержит опции, какВ JQuery, как скопировать подмножество опций выбора из одного меню выбора в другое?

<select id="select1"> 
    <option value="A">option A</option> 
    <option value="B">option B</option> 
    ... 
    <option value="">=============</option> 
    <option value="AA">option AA</option> 
    <option value="BB">option BB</option> 
    ... 
</select> 

Как скопировать параметры до и включая вариант с «=============» текстом второе меню выбора (скажем, во втором меню выбора есть id = 'select2').

Спасибо, - Дэйв

ответ

1

var option, count = -1; 
 
while ((option = $('#select1 option')[++count]).value != "") 
 
{ 
 
    $(option).clone().appendTo('#select2'); 
 
} 
 
$($('#select1 option')[count]).clone().appendTo('#select2'); //for the '=====' one
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id="select1"> 
 
    <option value="A">option A</option> 
 
    <option value="B">option B</option> 
 
    <option value="">=============</option> 
 
    <option value="AA">option AA</option> 
 
    <option value="BB">option BB</option> 
 
</select> 
 

 
<select id="select2"> 
 
</select>

+0

не связано с фактическим подходом, только несколько замечаний по оптимизации и читаемости. Вы действительно должны кэшировать этот объект jquery вместо повторного запроса DOM на каждой итерации цикла. Вы также можете рассмотреть использование '.eq' jquery для получения элемента вместо разворачивания и повторной упаковки элементов. –

0

Первое решение:

Вы можете сделать это следующим образом:

var emptyOption = $("#select1 option").filter(function() { 
        return $.trim($(this).val()) == ''; 
        }); 
var $options = emptyOption.prevAll().addBack().clone(); 
$('#select2').append($options); 

JSFiddle: http://jsfiddle.net/inanda/uosvokdr/2/

Второе решение:

Если вы можете добавить класс опций, которые вы хотите скопировать, вы можете сделать это следующим образом.

HTML

<select id="select1"> 
    <option value="A" class="copy">option A</option> 
    <option value="B" class="copy">option B</option> 

    <option value="" class="copy">=============</option> 
    <option value="AA">option AA</option> 
    <option value="BB">option BB</option> 

</select> 

<select id="select2"> 
</select> 

Javascript:

var $options = $("#select1 > option.copy").clone(); 

$('#select2').append($options); 

Рабочая JsFiddle: http://jsfiddle.net/inanda/m2qd177u/1/

+0

Хорошее начало, но вы не указали '' – j08691

+0

Конечно. Это фиксированная. :) –

+0

Вы не должны использовать 'andSelf', поскольку он устарел с 1,8. Вы должны использовать 'addBack', который является заменой и работает одинаково. Вы также можете упростить свою начальную строку до просто 'var emptyOption = $ (" # select1 option [value = ''] ");' и устранить необходимость в 'filter' (хотя это не будет обрабатывать' trim' у вас есть добавлено к вашему) –