我目前正在尝试在JavaScript中创建过滤器功能,允许您从预定义列表中进行选择以缩小所选选项的范围。
过滤器有多个选项,它很简单,可以根据过滤器中的匹配缩小列表范围,当时只有一个选项。但是如果选择了多个选项,我想根据匹配缩小列表范围。
示例:用户输入"您好"作为键"公司"的过滤器选项,这将导致选择仅匹配公司== Hello。如果用户然后选择第二个选项," Good day"对于密钥"位置",我只想缩小列表,如果密钥"公司"和"位置"匹配。
在没有实际编写任何代码的情况下,我知道这可以通过很多AND OR来完成,但我希望有一个更方便的方法来实现这一点,我&# 39;我没有看到。
var position = $('select[name=order_position]').select2('val');
var industry = $('select[name=order_industry]').select2('val');
var company = $('select[name=order_company]').select2('val');
$('.mail_select_prospect').each(function() {
var prospect_existing = $(this).attr('data-existing');
var prospect_position = $(this).attr('data-position');
var prospect_industry = $(this).attr('data-industry');
var prospect_company = $(this).attr('data-company');
var self = $(this);
if(
( $.inArray( prospect_position, position ) !== -1 ) ||
( $.inArray( prospect_industry, industry ) !== -1 ) ||
( $.inArray( prospect_company, company ) !== -1 ) ||
( $( 'input[name=order_existing]' ).is( ':checked' ) && prospect_existing == 1 ) ||
( $( 'input[name=order_nonexisting]' ).is( ':checked' ) && prospect_existing == 2 )
) {
self.prop('checked', true);
} else {
self.prop('checked', false);
}
});
这是我目前拥有的,它基于一个键匹配找到匹配,而我只想要匹配所有过滤器选择的结果。不仅仅是那个。
使用&&整个过程将强制用户在过滤器启动之前选择每个过滤器选项上的内容(显然),我希望可以选择一个关键字并与拥有该关键字的人匹配,或者如果选择了两个关键字我只能想要两个关键字都存在的匹配。
有什么建议吗?
答案 0 :(得分:0)
我可能会建议使用conditional ternary operator。如果定义了过滤条件,则使用它;否则应该经常检查该标准。因此,一个简化的示例可能类似于
if (
( position && position.length ? $.inArray( prospect_position, position ) !== -1 : true )
&& ( industry && industry.length ? $.inArray( prospect_industry, industry ) !== -1 : true )
&& ( $( 'input[name=order_existing]' ).is( ':checked' ) ?prospect_existing == 1 : true)
) {
...
}
此外,由于您在当前的示例代码中只是根据此条件检查设置值true或false,您可以直接分配过滤结果(或者为了清晰起见使用临时变量),
var include = ( position && position.length ? $.inArray( prospect_position, position ) !== -1 : true ) && ... ;
self.prop('checked', include);