Ну как-то
так.
Что надо сделать
Прочитать про ключевое слово
this и научиться с ним работать.
В вашем коде при каком-либо действии затрагиваются все элементы сразу, к примеру, вы пишите:
option.each(function(i, item){
list.append('<li>' + $(item).text() + '</li>');
});
И этот код добавит всем элементам
.list все элементы
option, какие только есть на странице. А на самом деле, у каждого
.select свой лист и опции и работать с ними нужно отдельно.
Еще интересные строки:
//Установит всем .selected на странице значение первого select'a
selected.text(select.val());
//Если первый .selected на странице имеет класс focus, скрыть все существующие списки
container.click(function(){
if(selected.hasClass('focus')){
list.slideUp(300, function(){
selected.removeClass('focus');
});
return;
};
list.slideDown(300);
selected.addClass('focus');
});
UPD: А скрывать списки по нажатию куда-то вне них можно так
$(document).click(function(e) {
$(e.target).closest(".select").length||
$(".focus").removeClass("focus")
.next(".list").slideUp(300);
});