如何删除具有相同值的重复下拉选项元素

Sus*_*ush 7 jquery

如何删除重复值 - >下拉选项元素?
我有以下HTML:

<option value="">All Servers</option>
<option value="com">http://smiles.com</option>
<option value="in">http://3smiles.com</option>
<option value="com">http://desk.com</option>
<option value="in">http://france24.com</option>
Run Code Online (Sandbox Code Playgroud)

从上面我不得不删除重复值comin,所以我预期的输出应该是这样的:

<option value="">All Servers</option>
<option value="com">http://smiles.com</option>
<option value="in">http://3smiles.com</option>
Run Code Online (Sandbox Code Playgroud)

如何使用jQuery做到这一点?

Rok*_*jan 28

使用.siblings()(以兄弟option元素为目标)和属性等于选择器[attr=""]

$(".select option").val(function(idx, val) {
  $(this).siblings('[value="'+ val +'"]').remove();
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<select class="select">
  <option value="">All</option>
  <option value="com">.com 1</option>
  <option value="net">.net 1</option>
  <option value="com">.com 2</option> <!-- will be removed since value is duplicate -->
  <option value="net">.net 2</option> <!-- will be removed since value is duplicate -->
</select>
Run Code Online (Sandbox Code Playgroud)

(也适用.select于同一页面上的多个)
.select<select>元素中添加了一个类,使其更具选择性

工作原理:
optionS被一个(由访问一个.val()) -用于查找.sibling() optionS作同样"[value='"+ this.value +"']".remove()他们.

  • 我认为,你应该在删除后添加`return val;` - 否则所有选项值都将变为空. (5认同)
  • 这里只有一个问题要纠正.请为值添加引号,否则会破坏```$(this).siblings("[value ='"+ this.value +"']").remove();``` (2认同)

Aru*_*hny 11

正确的解决方案是不允许服务器具有重复值....

尝试

var map = {};
$('select option').each(function () {
    if (map[this.value]) {
        $(this).remove()
    }
    map[this.value] = true;
})
Run Code Online (Sandbox Code Playgroud)

演示:小提琴


ael*_*lor 6

用这个 :

$(document).ready(function () {
    var usedNames = {};
    $("select > option").each(function () {
        if (usedNames[this.value]) {
            $(this).remove();
        } else {
            usedNames[this.value] = this.text;
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

这里演示:http://jsfiddle.net/aelor/aspMT/