2013-07-17 73 views
2

這是下拉列表框。我想使用javascript刪除重複的「Apple」。使用javascript從下拉列表中刪除重複元素

<select id="Fruits"> 
<option value="Apple" >Apple</option> 
<option value="Orange">Orange</option> 
<option value="Mango">Mango</option> 
<option value="Apple" >Apple</option> 
</select> 
+3

[] .slice.call (Fruits.options).map(function(a){if(this [a.value]){Fruits.removeChild(a);} else {this [a.value] = 1;}},{}) – dandavis

+0

@ dandavis ...你爲什麼不把這個作爲答案? – Shawn31313

+0

@ Shawn31313 downvote嚇跑了我... – dandavis

回答

1

在ES3 POJS可以做到這一點。

的Javascript

function removeDuplicateOptions(selectNode) { 
    if (typeof selectNode === "string") { 
     selectNode = document.getElementById(selectNode); 
    } 

    var seen = {}, 
     options = [].slice.call(selectNode.options), 
     length = options.length, 
     previous, 
     option, 
     value, 
     text, 
     i; 

    for (i = 0; i < length; i += 1) { 
     option = options[i]; 
     value = option.value, 
     text = option.firstChild.nodeValue; 
     previous = seen[value]; 
     if (typeof previous === "string" && text === previous) { 
      selectNode.removeChild(option); 
     } else { 
      seen[value] = text; 
     } 
    } 
} 

removeDuplicateOptions("Fruits"); 

jsfiddle

3

這是@DanDavis參考答案,我將它作爲你知道,公共服務。加上一些格式和一些替代方法來涵蓋類似的用例。

var fruits = document.getElementById("Fruits"); 

[].slice.call(fruits.options) 
    .map(function(a){ 
    if(this[a.value]){ 
     fruits.removeChild(a); 
    } else { 
     this[a.value]=1; 
    } 
    },{}); 

如果您使用的是選擇一個數據庫(一個很明顯的用例)和值填充工作是idsinnerText是你要刪除的重複。然後,而不是你想要的:

[].slice.call(fruits.options) 
    .map(function(a){ 
    if(this[a.innerText]){ 
     fruits.removeChild(a); 
    } else { 
     this[a.innerText]=1; 
    } 
    },{}); 

此外,如果要保留所選的選項試試這個(它可能不是匹配的首次出現。):

[].slice.call(fruits.options) 
    .map(function(a){ 
    if(this[a.innerText]){ 
     if(!a.selected) fruits.removeChild(a); 
    } else { 
     this[a.innerText]=1; 
    } 
    },{}); 
+0

我知道這是舊的,但我想知道是否有一種方法來映射ID和檢查他們每個人? – Brad

+0

@特別是如果您將此作爲問題發佈,我會回答。 (你可能會發現一個類似的問題已經存在。)好像你只需要一個ID的數組作爲字符串和映射,然後返回找到的元素,或者返回null。您可以選擇壓縮數組(使用lo-dash /下劃線等) - 如果您發佈了一個問題,請將其鏈接到此處。 – ocodo

+0

我已經在這裏發佈的問題:http://stackoverflow.com/questions/25562969/remove-multiple-duplicate-options-from-drop-down-list我試着嘲笑一些東西,但我在JavaScript很糟糕。謝謝! – Brad