首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从下拉列表中删除多个重复选项

从下拉列表中删除多个重复选项
EN

Stack Overflow用户
提问于 2014-08-28 22:46:30
回答 1查看 1.1K关注 0票数 0

类似于这个问题,here,我想了解如何从下拉列表中删除重复的选项,但是我想映射一个ID列表来搜索,看看他们是否有重复的选项来拼接,而不是仅仅一个输入选择器。

这方面的一个例子如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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有重复的值,我希望能够搜索所有下拉框中的重复值(或内部文本),并将它们拼接出来。通过某种映射就可以做到这一点吗?

将使用的代码为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[].slice.call(fruits.options)
  .map(function(a){
    if(this[a.innerText]){ 
      if(!a.selected) fruits.removeChild(a); 
    } else { 
      this[a.innerText]=1; 
    } 
  },{}); 

为了了解我对下拉列表的映射是什么意思,我会使用如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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; 
        } 
      },{}); 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-30 01:35:38

不确定脚本的handleLists部分中发生了什么。您只需要在找到与ID对应的元素之后,将另一个段包装在迭代器(forEach)中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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; 
    }
  },{});
});  

当然,这很糟糕。你应该把它自己的功能去复制,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function deDuplicate(select){
  [].slice.call(select.options)
    .map(function(a){
      if(this[a.value]){
        select.removeChild(a); 
      } else {
        this[a.value]=1; 
      }
    },{});
}

然后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var idList= ["MeatList", "Seats", "Lastname"].map(function(id){return document.getElementById(id)});    
idList.forEach(function(select){ deDuplicate(select); });

就我个人而言,我建议学习/使用CoffeeScript,因为它能很好地解开Javascript,这个dupe看起来如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
deDuplicate = (select)->
  [].slice.call(select.options).map (a)->
    if @[a.value] 
      select.removeChild a
    else 
      @[a.value] = 1
  , {}

然后包装你可以:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
deDuplicate select for select in ["MeatList", "Seats", "Lastname"].map (id)-> 
  document.getElementById id

它读起来像英语,至少对我来说是这样。和往常一样。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25562969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文