Bienvenido a Foros del Web.
Como supongo que cuando se elija una segunda opción querrás que la que previamente fue retirada del otro combo retorno al mismo, tendrías que ejecutar un ciclo en el cual recorrerías el array y solo tomarías a los valores que sean distintos al seleccionado en el combo en el cual se produjo el cambio de opción. Y como sería lo mismo para el otro combo, lo conveniente es utilizar una función.
Un ejemplo:
Código Javascript
:
Ver originalvar o = ["foo", "bar", "bin", "baz"], a, b, op, po, fn = function(s, v){
s.innerHTML = "";
for (var i in o){
if (o[i] != v){
op = document.createElement("option");
op.value = o[i];
op.text = o[i];
s.add(op);
}
}
};
//Al terminar de cargar los elementos de la página
document.addEventListener("DOMContentLoaded", function(){
a = document.querySelector("#a");
b = document.querySelector("#b");
//Llenamos ambos combos
for (var i in o){
op = document.createElement("option");
op.value = o[i];
op.text = o[i];
po = op.cloneNode(true); //Clonamos a la opción previamente creada
a.add(op);
b.add(po);
}
a.addEventListener("change", function(){
fn(b, this.value);
}, false);
b.addEventListener("change", function(){
fn(a, this.value);
}, false);
}, false);
Cuando se elija una opción en cualquiera de ambos combos, se enviará como argumentos de la función al otro combo y el valor del combo actual. En la función,
limpias al otro combo, recorres la lista de opciones y en cada iteración verificas que el valor actual en el bucle es diferente al valor seleccionado en el combo actual; de ser así, creas la opción, le asignas el valor y texto y la adhieres al otro combo.
DEMO
Un saludo