Выберите элемент в коллекции jquery по значению, используя переменную - PullRequest
0 голосов
/ 27 июня 2019

Я использую jQuery и у меня есть коллекция (объект?), Которая содержит входные данные со страницы. У меня есть переменная, которая содержит атрибут значения для каждой итерации цикла. Я хочу найти входные данные со значением, соответствующим моей переменной, чтобы я мог поставить галочку.

function reject(el) {
    const checkBox = $(el).find('input:checkbox');
    if (tempStore.checks.length > 0) {
        for (let j=0;j<tempStore.checks.length;j++) {
            $(checkBox).find("input.val("+tempStore.checks[j]+")").checked = true;
        }
    }
}

Я искал онлайн несколько часов и не могу найти правильный синтаксис. Кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 27 июня 2019

Если значение установлено в DOM, вы можете попробовать выбрать его с помощью атрибута с помощью селектора [value=""]:

let value = "A";

$('body').find('input[value="' + value + '"]').prop("checked", "checked");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" value="A">

Обратите внимание, что в вашем коде вы можете сделать:

checkBox.filter(...)

Это увеличит производительность, как это будет filter уже заполненный список элементов вместо find.

Другое решение (не самое лучшее) состоит в том, чтобы выбрать его вместо val():

let $checks = $('body').find('input[type="checkbox"]'),
    value = "B";
    
$checks.each(function() {
  let $this = $(this);
  
  if ($this.val() == value) {
    $this.prop("checked", "checked");
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" value="A">
<input type="checkbox" value="B">
<input type="checkbox" value="C">
0 голосов
/ 27 июня 2019

Вы можете использовать filter, передав функцию сравнения.

// Reset state
let $checkbox = $('input:checkbox').prop('checked', false);
let valuesToCheck = ['1', '4'];

$checkbox.filter(function() {
  return valuesToCheck.includes(this.value)
}).prop('checked', true); 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="checkbox" value="1">
<input type="checkbox" value="2">
<input type="checkbox" value="3">
<input type="checkbox" value="4">
<input type="checkbox" value="5">

То же самое, используя синтаксис функции стрелки (вы не можете полагаться на «this» для установки)

$checkbox.filter((i, e) => valuesToCheck.includes(e.value)).prop('checked', true);

Некоторые комментариио вашем исходном коде:

  • Вы не нуждаетесь в > 0' in your if` выражении, так как '0' - значение Фолси.
  • Вам не нужно ifвообще, поскольку условие в for никогда не будет истинным и никогда не будет выполнено.
  • Внутри for вы конвертируете коллекцию jQuery в коллекцию jQuery.Нет необходимости, просто используйте checkbox.
  • Наконец, вы пытаетесь find элемент input внутри коллекции, состоящей из input элементов, так что вы ничего не найдете.Вы должны использовать checkBox.filter(...).

Соберите все вместе:

function reject(el) {
    const $checkBox = $(el).find('input:checkbox');
        for (let j=0;j<tempStore.checks.length;j++) {
            $checkBox.filter((i,e) => e.value == tempStore.checks[j]).prop('checked', true)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...