2010-04-02 73 views
3

我有n个下拉式选单,像这样:如何使用jquery从select元素中删除选项?

<select id="select1"> 
    <option>1</option> 
    <option>2</option> 
    <option>3</option> 
</select> 

<select id="select2"> 
<option>1</option> 
<option>2</option> 
<option>3</option> 
</select> 

具有相同的选项。所有的选择都应该是唯一的,所以一旦在一个组合框中选择了该选项,就应该将其从其他选项中移除。因此,如果用户在select1中选择“1”,则select2中将只有选项“2”和“3”。

现在,jQuery disable SELECT options based on Radio selected (Need support for all browsers)提供了一个很好的解决方案,但我该如何修改此选项而不是单选按钮?

回答

6

这是你的意思吗?仅在第一<select>

$("select").each(function() { 
    var select = $(this); 
    select.children("option").each(function() { 
    $('select').not(select).children("option[value=" + this.value + "]").remove(); 
    }); 
}); 

这将删除所有的复制,让他选择:

这将消除一切从#select2这是在#select1

$("#select2 option").each(function() { 
    if($("#select1 option[value=" + this.value + "]").length) 
     $(this).remove(); 
}); 

这里的另一个替代方案,删除所有重复它发现它。

更新您的评论:

$("#select1").change(function() { 
$("#select2 option[value=" + $(this).val()+ "]").remove(); 
}); 
+0

谢谢,但我只需要删除选定的元素。因此,如果用户在select1中选择“1”,则select2中将只有选项“2”和“3”。 – 2010-04-02 12:15:43

+0

@Lapa - 增加了一个选项,你可以看到它在这里工作:http://jsfiddle.net/tdKUP/ – 2010-04-02 12:20:26

+0

+1删除我的答案,因为你的覆盖它很好:)但我认为在你的替代方法,你应该也可以使用'change'而不是'each' – 2010-04-02 12:23:25

1

或者,如果选择具有相同顺序的相同选项。

$('select').change(function() { 
    var selectedIndex = $(this).find(':selected').index();  
    $('select').not(this).find('option:nth-child(' + selectedIndex + ')').remove(); 
)}; 

我认为这种方式更快(但不太容易阅读)。

+0

这不像你想象的那样:)一旦你删除第一个元素,顺序不再是相同的,你的索引关闭:) – 2010-04-02 12:27:22

+0

公平点..好的,如果你使用它虽然一次.. :) – Alistair 2010-04-02 12:40:03

相关问题