简体   繁体   English

jQuery-从父列表中删除选择的选项

[英]jQuery - Remove selected option from parent list

I have list 1: 我有清单1:

<select>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="vw" selected>VW</option>
  <option value="audi">Audi</option>
</select> 

And list 2: 清单2:

<select>
  <option value="saab">Saab</option>
  <option value="vw">VW</option>
</select>

I want to use jQuery to remove from list2 the list1's selected value(s). 我想使用jQuery从list2中删除list1的选定值。 Can be one or more values. 可以是一个或多个值。

I'm using this code to add options from list 1 to list 2: 我正在使用此代码从列表1到列表2添加选项:

var options = $("#list1 option:selected").clone();
$("#list2 select").append(options);

If you have multiple select element ("Can be one or more values"), the val method returns an array of selected values. 如果您有多个选择元素(“可以是一个或多个值”),则val方法将返回所选值的数组。 You can use that array for filtering the corresponding option elements: 您可以使用该数组来过滤相应的选项元素:

var vals = $('#list1 select').val();

$('#list2 option').filter(function() {
   return vals.indexOf(this.value) > -1;
}).remove();

to remove option in list2 chosen from list1 删除从list1中选择的list2中的选项

$('#list1').on('change',function(){
    var thisval = $(this).val();
        $("#list2 option[value='"+thisval+"']").remove();
});

DEMO DEMO

You can separate the logic into two distinct functions: 您可以将逻辑分为两个不同的功能:

  1. Remove options based on a list of possible values 根据可能的值列表删除选项
  2. Get selected values from a select box 从选择框中获取选择的值

Depending on whether you've specified multiple attribute in the select box, the selected value will either be an array or a single value. 根据您是否在选择框中指定了multiple属性,所选值将为数组或单个值。

 function remove_options(select, values) { $('> option', select).filter(function() { return values.indexOf(this.value) != -1; }).remove(); } function selected_values(select) { var values = $(select).val(); return $.isArray(values) ? values : [values]; } remove_options('#list2', selected_values('#list1')); remove_options('#list2_multiple', selected_values('#list1_multiple')); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <select id="list1"> <option value="volvo">Volvo</option> <option value="saab">Saab</option> <option value="vw" selected>VW</option> <option value="audi">Audi</option> </select> <select id="list2"> <option value="saab">Saab</option> <option value="vw" selected>VW</option> </select> <select id="list1_multiple" multiple="multiple"> <option value="volvo">Volvo</option> <option value="saab" selected>Saab</option> <option value="vw" selected>VW</option> <option value="audi">Audi</option> </select> <select id="list2_multiple" multiple="multiple"> <option value="saab">Saab</option> <option value="vw" selected>VW</option> </select> 

This should work: 这应该工作:

function removeOption (i) {
    $("#list2 select > option:eq("+i+")").remove();
}
removeOption(2);

if you want to remove the 3rd option. 如果要删除第三个选项。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM