javascript – 从选择框中删除重复的条目

我将如何使用jQuery删除重复项
<option value="English">English</option>
        <option value="English">English</option>
        <option value="English">English</option>
        <option value="Geology">Geology</option>
        <option value="Geology">Geology</option>
        <option value="information Technology">information Technology</option>
        <option value="Music">Music</option>
        <option value="Music">Music</option>
        <option value="Zoology">Zoology</option>

解决方法

你可以这样做:
var found = [];
$("select option").each(function() {
  if($.inArray(this.value,found) != -1) $(this).remove();
  found.push(this.value);
});

Give it a try here,这是一个简单的方法,我们只保留一个找到的值数组,如果我们没有找到该值,将它添加到数组(.push()),如果我们找到了值,这个是我们之前发现的欺骗,.remove()它.

这只会抓取< select>曾经,最小化DOM遍历,这比阵列操作贵很多.我们也使用$.inArray()而不是.indexOf(),所以这在IE中正常工作.

如果你想要一个效率较低但更短的解决方案(仅用于说明,请使用第一种方法!):

$('select option').each(function() {
  $(this).prevAll('option[value="' + this.value + '"]').remove();
});

You can test it here,这会移除所有具有相同值的兄弟姐妹,但它比第一种方法贵得多(DOM Traversal很昂贵,而且这里有多个选择器引擎调用,还有更多).我们正在使用.prevAll(),因为你不能在.each()删除.siblings(),它会导致循环出错,因为它预计下一个孩子.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...