Использовать сгенерированную строку внутри jQuery Filter - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь перенести сгенерированную строку в качестве рабочего условия фильтра в jQuery Filter.

Что я уже сделал:

const elements = 3;

let foundMatch = false;
let line = "";

// generate a filter condition per element count
for (let i = 0; i < elements; i++) {
  line += "$(this).find('.segment:eq(" + i + ")').data('stops') <= filterData.stops[" + i + "] && ";
}            


// combine the generated filter conditions with the existing one
for (let i = 0; i < elements; i++) {
  console.log(line);

  foundMatch = foundMatch ||                    
    $("input[type='radio']:eq(0)").is(":checked") &&
    line;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" name="sample" value="abc" checked />
<input type="radio" name="sample" value="def" />
<input type="radio" name="sample" value="xyz" />

Но, похоже, это не работает.Как правильно объединить строку с существующим условием фильтра, чтобы функция фильтра снова могла работать?

Fiddle: https://jsfiddle.net/SchweizerSchoggi/6zt8Lgh5/16/

1 Ответ

0 голосов
/ 27 февраля 2019

Вот рабочий код:

const elements = 3;

const isMatchFound = () => {
  let conditions = [];
  
  conditions.push($("#input[type'radio']:eq(0").is(":checked"));

  for (let i = 0; i < elements; i++) {
    conditions.push($(document).find(".segment:eq(" + i + ")").data("stops") <= filterData.stops[i]);
  }
  
  // for test purposes
  //conditions = [true, true, false]; => false
  //conditions = [true, true, true]; => true
  return conditions.every(a => a === true);
};

const foundMatch = isMatchFound();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" name="sample" value="abc" checked />
<input type="radio" name="sample" value="def" />
<input type="radio" name="sample" value="xyz" />

Вы заполняете массив результатов условий, а затем проверяете, все ли условия true.


Это решение использует Array.prototype.every () , метод, который проверяет, проходит ли каждый элемент массива тест, указанный вами в качестве параметра.

Здесь мой тест равен a => a === true, чтоES6 Функции стрелок .По сути, это просто еще один способ записи function (a) { return a === true; }.

Итак, тест состоит в простой проверке, строго ли равна предоставленная переменная (которую я назвал a в данном случае) true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...