我正在尝试将生成的字符串作为有效的过滤条件引入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" />
但这似乎行不通。如何以正确的方式将字符串与现有过滤条件组合在一起,以便过滤功能可以再次工作?
答案 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
。