我有4个选择框,每个都包含完全相同的数据:jQuery的删除选项除了当前
- 骑
- 钓鱼
- 吸烟
- 飞
如果我在选择框[0]中选择“骑马”,我想从除了当前选择框以外的每个剩余选项中删除选项。
我试过select:not(:first-child),但是这会删除,只有当第一个孩子是选择,而不是任何其他。
基本上,我需要从所有下拉列表中删除选定的选项,除了我所做的选择。
我有4个选择框,每个都包含完全相同的数据:jQuery的删除选项除了当前
如果我在选择框[0]中选择“骑马”,我想从除了当前选择框以外的每个剩余选项中删除选项。
我试过select:not(:first-child),但是这会删除,只有当第一个孩子是选择,而不是任何其他。
基本上,我需要从所有下拉列表中删除选定的选项,除了我所做的选择。
试试这个:
$('#select1').on('change', function() {
var val = this.value;
$('select').not(this).children().filter(function() {
return this.value === val;
}).remove();
});
即每一个<select>
即not this
,获得其children
,但filter
的,其.value
是不是像我一样的人,和他们remove
。
在
工作演示如果您需要的时候第一项改为别的东西来重新添加元素,你可能会考虑只克隆整个第一select
同时过滤掉不需要的项目。
在这种情况下,过滤器将需要!==
,因为我们希望所有的元素,除了相匹配的一个,即
$('#select1').on('change', function() {
var val = this.value;
$('select').not(this).empty().append($(this).children().filter(function() {
return this.value !== val;
}).clone());
});
我想你会让这个过于复杂。指定'.children('option')'可以简单地为'.children('[value ='+ val +']')'。不需要在'.children()'中指定'option'作为标签,并且使用属性equals选择器可以避免使用'filter'。 – maxedison 2012-02-02 12:23:29
@maxedison作为原则问题我不在选择器中使用字符串连接,这是不安全的。 – Alnitak 2012-02-02 12:27:38
@Alnitak你会介意为什么字符串连接在这个庄园不安全的例子吗? – Craig 2012-02-02 12:43:16
工作演示你需要将它们添加回如果选项更改? – 2012-02-02 12:16:00
可能重复的[防止多重选择相同的值](http://stackoverflow.com/questions/4001805/prevent-multiple-selections-of-same-value) – 2012-02-02 12:16:31
Andy E,很可能是的。但是我确信我可以将步骤重新添加到项目中,将存储在某个位置的值(如隐藏字段或其他东西)删除,然后将其添加回来并替换新删除项目的值。 – JadedEric 2012-02-02 12:30:46