11

我有一个从列表生成的下拉选择器,并且想要过滤选项以删除重复的条目。例如我想过滤...

<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 Lookup,我想我可以使用 jquery 只保留唯一选项,而不必深入了解正在发生的事情。)我可以删除这样的选项吗?谢谢。

4

3 回答 3

32

你可以用一个简单的循环来做到这一点——不过,可能有一种更聪明的方法可以用我没有看到的 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(); });
于 2009-12-09T19:08:59.847 回答
6

你可以这样做:

var previousOption;
$('select[name=company] option').each(function() {
    if (this.text == previousOption) $(this).remove();
    previousOption= this.text;
});
于 2009-12-09T19:07:51.300 回答
5

您可以尝试以下代码,无论其位置如何,它都会删除重复项。这里#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();
}); 
于 2010-07-15T10:56:47.817 回答