从选择下拉列表中筛选重复选项
我有一个从列表中生成的下拉选择器,并且想要筛选选项以删除重复的条目。例如我想筛选...从选择下拉列表中筛选重复选项
<select name="company">
<option "1">Microsoft</option>
<option "2">Microsoft</option>
<option "3">Microsoft</option>
<option "4">Microsoft</option>
<option "5">Apple</option>
<option "6">Apple</option>
<option "7">Google</option>
</select>
...下呈现的东西,如用户...
<select name="company">
<option "1">Microsoft</option>
<option "5">Apple</option>
<option "7">Google</option>
</select>
(数据来自一个SharePoint查找另一名单上,我以为我可以使用jquery只保留唯一的选项,而不必进入正在发生的事情。)我可以删除这样的选项吗?谢谢。
你可以用一个简单的循环做到这一点 - 有可能是与我没有看到jQuery选择来处理这一个聪明的方式,虽然。下面应该工作:
var usedNames = {};
$("select[name='company'] > option").each(function() {
if(usedNames[this.text]) {
$(this).remove();
} else {
usedNames[this.text] = this.value;
}
});
编辑:这里有一个函数式的单行,与优秀Underscore.js的帮助下做吧,虽然以前的版本几乎可以肯定是更有效的:
_.each(_.uniq(_.pluck($("select[name='company'] > option").get(), 'text')), function(name) { $("select[name='company'] > option:contains(" + name + ")").not(":first").remove(); });
你可以做这样的事情:
var previousOption;
$('select[name=company] option').each(function() {
if (this.text == previousOption) $(this).remove();
previousOption= this.text;
});
认为你要在这种情况下文本()不是val()。 – Ryan 2009-12-09 19:14:41
三个注意事项: 1.我想你会想使用text()而不是val();因为这些值看起来不同。 2.这并不能说明重复值交替出现的情况(即微软,苹果,微软),尽管从最初的问题来看这是否是一种可能性。 3.我建议在函数的开头只调用一次$(this)(即'var option = $(this);'),因为我相信这是一个相当昂贵的操作。 – 2009-12-09 19:15:48
感谢您的好想法。然而,val()在这种情况下确实为我返回了正确的值。我同意文字会更好。 – 2009-12-09 19:28:30
您可以尝试下面的代码,它将删除重复项,无论其位置如何。这里#targetSelect是你的目标下拉
var a = new Array();
$(#targetSelect).children("option").each(function(x){
test = false;
b = a[x] = $(this).text();
for (i=0;i<a.length-1;i++){
if (b ==a[i]) test =true;
}
if (test) $(this).remove();
});
谢谢。这几乎是我正在寻找的东西,但是我被绑定了JS语法。 – afewscoops 2009-12-10 13:09:17