Как удалить несколько вариантов выбора на основе динамического значения

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть 2 поля выбора, во втором из которых отображается подмножество всех параметров, основанных на категории в первом поле. Второе поле содержит идентификаторы и имена, где значение параметра равно идентификатору. Я уже отфильтровал интересующие меня идентификаторы и собрал их в массив. Это будет меняться каждый раз и может быть разных размеров (фильтрация всех пользователей по группам). Что я хотел бы сделать, так это взять клон полных параметров, а затем показать только те, чей идентификатор (или значение) присутствует. Итак, сравните массив отфильтрованных значений с полным набором. Я видел пару способов удаления параметров, но большинство из них были только для одного значения за раз или для фиксированных значений, так что это не совсем то, что мне нужно, и я не могу понять, как сделать этот последний шаг! Выглядит следующим образом:

 <select id = 'doctor_select' >
<option value = '1' > John Doe </option>
<option value = '2' > Jane Doe </option> 
  

…. etc

редактировать: решаемая на данный момент путем скрытия всех и выполнения для каждого цикла, чтобы включить те, которые мне нужны.

Комментарии:

1. Вы пытаетесь сопоставить идентификаторы с параметрами? Вы хотите, чтобы отображались только те параметры, которые соответствуют идентификатору? Как бы вы сказали, связано ли значение параметра с идентификатором?

2. Значения уже являются идентификаторами пользователей, и в них отображается их имя. Массив отфильтрованных пользователей содержит все идентификаторы в любой группе, в которой выполняется поиск, поэтому я хочу показать только эти параметры из общего списка.

3. где находится массив? Цель все еще не очень ясна

4. Я не уверен, насколько ясно я могу это сделать. Я думаю, это говорит об этом довольно ясно. У меня есть некоторый массив идентификаторов, их может быть любое количество, мне нужно сохранить параметры с этими значениями.

5. просмотр вашего редактирования… вы не можете скрыть <option> тег!! Он не поддерживается кроссбраузерным… в первую очередь это приведет к сбою в IE и Safari

Ответ №1:

Я бы не стал делать это так, но вы могли бы клонировать исходную комбинацию и просто удалить ненужные параметры из DOM. Что-то вроде:

 var newDoctorSelect=$("#doctor_select").clone();
$(newDoctorSelect).children("option").each(function() {
    if(some condition) $(this).remove();
});
$("#somewhere").append(newDoctorSelect);
  

Но я бы рекомендовал либо использовать AJAX, либо сохранять параметры в объекте и заполнять выбор при необходимости.

 var optionsByCategory={
    "1":{"1":"One","3":"Three"},
    "2":{"2":"Two"}
};

$("#categorySelect").on("change",function() {
    var options=optionsByCategory[$(this).val()];
    //OR some AJAX call to retreive the options from the server instead
    $("#doctor_select option").remove();
    for(var k in options) $("#doctor_select").append($("<option>").val(k).text(options[k]));
});
  

Ответ №2:

Вы могли бы сделать это:

 var options = getElementsByTagName("option"),
    elem,
    length = options.length;

for (var i = 0; i<length; i  ) {
    if (!((elem = options[i]).value === IDYouWantToMatch)); elem.parentNode.removeChild(elem);
}
  

Ответ №3:

Я думаю, вы хотите что-то вроде следующего, используя filter()

 var $sel = $('#doctor_select'),
    $opts =  $sel.children();

var $filteredOpts = $opts.clone().filter(function(){
     return someArray.indexOf(this.value)>-1;
})
$sel.empty().append($filteredOpts);
  

Сохраненные $opts теперь можно повторно использовать для будущих изменений