删除所选选项中的重复元素


delete duplicate element in selected option

>我有两个选择的选项:第一个是联系人,第二个是contact2。 第一个选择选项中的元素将添加到第二个列表中。函数 bellow 让我毫无问题地添加所有元素,但我想只添加具有唯一 id 的元素,因为第一个列表包含许多重复的选项 ID。

function addAllElement(object){
    contacts = document.getElementById('contact');
    long = object.options.length;
    for (i=0;i<long;i++){
        txt = object.options[i].text;
        valor = object.options[i].value;
        idd=object.options[i].id;
        addOption(contact2,i,idd,txt,valor);
    }
}

这是具有重复 ID 的列表示例

<select name="contacts" id="contacts" multiple="">
    <option value="7147582,2" id="77">Test</option>
    <option value="7189466,2" id="62">test2</option>
    <option value="7" id="62">contact3</option>
    <option value="72" id="64">ERRZERZE, zerzerze</option>
    <option value="71" id="62">contact 5</option>
    <option value="72y" id="001">contact 6</option>
</select>

当您看到许多具有相同 id 的元素时,预测结果是一个没有重复元素的列表

我会创建一个数组来存储每次迭代的每个id。如果已创建id,则不要将其添加到第二个select。以这种方式重做函数:

function addAllElement(object) {
    var i, valor, idd, txt;
    var long = object.options.length;
    var ids = [];
    for (i = 0; i < long; i++) {
        txt = object.options[i].text;
        valor = object.options[i].value;
        idd = object.options[i].id;
        if (ids.indexOf(idd) == -1) {
            addOption("contact2", i, idd, txt, valor);
            ids.push(idd);
        }
    }
}

您可以在调用 addOption 方法之前检查具有该 id 的元素的长度:

 for (i=0;i<long;i++){
            txt = object.options[i].text;
            valor = object.options[i].value;
            idd=object.options[i].id;
            if(document.getElementById(idd).length)
              addOption(contact2,i,idd,txt,valor);
        }