>我有两个选择的选项:第一个是联系人,第二个是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);
}