#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
теперь можно повторно использовать для будущих изменений