类似于这个问题,here,我想了解如何从下拉列表中删除重复的选项,但是我想映射一个ID列表来搜索,看看他们是否有重复的选项来拼接,而不是仅仅一个输入选择器。
这方面的一个例子如下:
<select id="MeatList">
<option value="OBgYN7" >Ham</option>
<option value="ELmn5">Beef</option>
<option value="KrUKt6">Chicken</option>
<option value="OBgYN7" selected="selected">Ham</option>
</select>
<select id="Seats">
<option value="2" >Table For Two</option>
<option value="3">Table For Three</option>
<option value="5">Table for Five</option>
<option value="10" >Party Table</option>
</select>
<select id="Lastname">
<option value="Tao" >The Tao's</option>
<option value="Smith">The Smith's</option>
<option value="Samuels">The Samuels'</option>
<option value="Smith" >The Smith's</option>
</select>
正如您所看到的,输入MeatList和Lastname有重复的值,我希望能够搜索所有下拉框中的重复值(或内部文本),并将它们拼接出来。通过某种映射就可以做到这一点吗?
将使用的代码为:
[].slice.call(fruits.options)
.map(function(a){
if(this[a.innerText]){
if(!a.selected) fruits.removeChild(a);
} else {
this[a.innerText]=1;
}
},{});
为了了解我对下拉列表的映射是什么意思,我会使用如下代码:
var idlist= ["MeatList", "Seats", "Lastname"];
var handlelists = idlist.join("|");
[].slice.call(handlelists.options)
.map(function(a){
if(this.search([a.innerText])){
if(!a.selected) handlelists.removeChild(a);
} else {
this[a.innerText]=1;
}
},{});
发布于 2014-08-30 01:35:38
不确定脚本的handleLists
部分中发生了什么。您只需要在找到与ID对应的元素之后,将另一个段包装在迭代器(forEach
)中。
var idList= ["MeatList", "Seats", "Lastname"].map(function(id){return document.getElementById(id)});
idList.forEach(function(select){
[].slice.call(select.options)
.map(function(a){
if(this[a.value]){
select.removeChild(a);
} else {
this[a.value]=1;
}
},{});
});
当然,这很糟糕。你应该把它自己的功能去复制,例如:
function deDuplicate(select){
[].slice.call(select.options)
.map(function(a){
if(this[a.value]){
select.removeChild(a);
} else {
this[a.value]=1;
}
},{});
}
然后:
var idList= ["MeatList", "Seats", "Lastname"].map(function(id){return document.getElementById(id)});
idList.forEach(function(select){ deDuplicate(select); });
就我个人而言,我建议学习/使用CoffeeScript,因为它能很好地解开Javascript,这个dupe看起来如下所示:
deDuplicate = (select)->
[].slice.call(select.options).map (a)->
if @[a.value]
select.removeChild a
else
@[a.value] = 1
, {}
然后包装你可以:
deDuplicate select for select in ["MeatList", "Seats", "Lastname"].map (id)->
document.getElementById id
它读起来像英语,至少对我来说是这样。和往常一样。
https://stackoverflow.com/questions/25562969
复制相似问题