在jQuery过滤器中使用生成的字符串

时间:2019-02-27 14:30:22

标签: jquery filter

我正在尝试将生成的字符串作为有效的过滤条件引入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" />

但这似乎行不通。如何以正确的方式将字符串与现有过滤条件组合在一起,以便过滤功能可以再次工作?

提琴:https://jsfiddle.net/SchweizerSchoggi/6zt8Lgh5/16/

1 个答案:

答案 0 :(得分:1)

这是一个有效的代码:

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的Arrow functions 。基本上,这只是写function (a) { return a === true; }的另一种方式。

因此,测试仅是检查所提供的变量(在本例中为a)是否严格等于true