2012-02-02 77 views
1

我有4個選擇框,每個都包含完全相同的數據:jQuery的刪除選項除了當前

  • 釣魚
  • 吸菸

如果我在選擇框[0]中選擇「騎馬」,我想從除了當前選擇框以外的每個剩餘選項中刪除選項。

我試過select:not(:first-child),但是這會刪除,只有當第一個孩子是選擇,而不是任何其他。

基本上,我需要從所有下拉列表中刪除選定的選項,除了我所做的選擇。

+0

工作演示你需要將它們添加回如果選項更改? – 2012-02-02 12:16:00

+0

可能重複的[防止多重選擇相同的值](http://stackoverflow.com/questions/4001805/prevent-multiple-selections-of-same-value) – 2012-02-02 12:16:31

+0

Andy E,很可能是的。但是我確信我可以將步驟重新添加到項目中,將存儲在某個位置的值(如隱藏字段或其他東西)刪除,然後將其添加回來並替換新刪除項目的值。 – JadedEric 2012-02-02 12:30:46

回答

5

試試這個:

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

http://jsfiddle.net/alnitak/ARUmX/

+0

我想你會讓這個過於複雜。指定'.children('option')'可以簡單地爲'.children('[value ='+ val +']')'。不需要在'.children()'中指定'option'作爲標籤,並且使用屬性equals選擇器可以避免使用'filter'。 – maxedison 2012-02-02 12:23:29

+0

@maxedison作爲原則問題我不在選擇器中使用字符串連接,這是不安全的。 – Alnitak 2012-02-02 12:27:38

+1

@Alnitak你會介意爲什麼字符串連接在這個莊園不安全的例子嗎? – Craig 2012-02-02 12:43:16

0

還有.not()方法和選擇器。

http://api.jquery.com/not/

從文檔:

。不(函數(指數))

函數(指數)用作用於組中的每個元件的測試的功能。 這是當前的DOM元素。