#html #jquery #arrays #match
Вопрос:
Я пытаюсь найти наиболее эффективный способ перебора массива строк, а затем установить соответствующий флажок, соответствующий любому из значений, найденных в массиве.
Я придумал ниже, что работает, но я думаю, что, вероятно, есть более эффективное решение. У кого-нибудь есть какие-нибудь советы, чтобы помочь мне с этим разобраться?
<script>
var comodArr = ['Gold','Copper'];
jQuery(document).ready(function() {
jQuery("#setfilters").click(function() {
<!-- Commodities -->
if(jQuery.inArray("Gold", comodArr) !== -1) {
jQuery('li[val="Gold"] input').click();
}
if(jQuery.inArray("Silver", comodArr) !== -1) {
jQuery('li[val="Silver"] input').click();
}
if(jQuery.inArray("Copper", comodArr) !== -1) {
jQuery('li[val="Copper"] input').click();
}
});
});
</script>
<a class="btn btn-primary" href="#" id="setfilters" style="display: inline-block;"><i class="fas fa-arrow-down">amp;nbsp;</i> Set Filters</a>
Обновленный код после ответа ниже. Намного лучше!
<script>
var fieldVals = ['Gold', 'Copper'];
var fieldValArr = fieldVals.split(', ');
jQuery(document).ready(function() {
jQuery("#setfilters").click(function() {
fieldValArr.forEach(fieldVal => jQuery("li[val='" fieldVal "'] input").click());
});
});
</script>
Комментарии:
1. Нужно ли вам иметь возможность отменить это, если пользователь изменит фильтры?
2. Не уверен, что это нужно. О чем ты там думаешь? Массив устанавливается динамически при загрузке страницы. Это должна быть кнопка, которая предварительно устанавливает фильтры на основе известных интересов пользователя, сохраненных в базе данных.
3. Трудно вносить предложения, не зная, как должен работать пользовательский интерфейс
4. Ну, если бы это не было очевидно, я манипулирую уже существующим пользовательским интерфейсом, чтобы добиться результата удобства использования, который не был запланирован разработчиком. Я определяю значения «моих» интересов и проверяю входные данные, чтобы получить быстрый отфильтрованный результат. Можно по-прежнему использовать текущий пользовательский интерфейс для выбора/отмены выбора по мере необходимости.
Ответ №1:
Пройдите по массиву.
comodArr.forEach(comod => jQuery(`li[val="${comod}"] input`).click());
Кстати, вы не должны добавлять нестандартные атрибуты, такие как val
элементы. Если вам нужно добавить свои собственные атрибуты, используйте data-XXX
, например data-val="Gold"
Комментарии:
1. Идеально! Очень признателен. Не мой код, которым я манипулирую, но согласовал нестандартные attrs по элементам.