javascript - 使用 jQuery 操作和过滤多个 html 数据属性

标签 javascript jquery arraylist filtering jquery-filter

您好 stackoverflow 用户,

我想创建一个工作列表,该列表将按 4 个标准进行过滤,当用户应用其中一个标准时,我希望我的列表通过 jQuery live 进行过滤,并更新列表并显示正确的结果。

看看我的代码:

A) HTML 过滤器

<select id="country">

<option>Italy</option>

<option>France</option>

....

</select>

<select id="industry">

<option>Finance</option>

<option>Internet</option>

....

</select>

<select id="remote">

<option>Yes</option>

<option>No</option>

....

</select>

<select id="sponsor-visas">

<option>Yes</option>

<option>No</option>

....

</select>

B) HTML 工作列表

<div class="job-container" data-country="Italy" data-industry="Finance" data-remote="Yes" data-sponsor-visa="No">

//Here the content of a job eg: Images, Title and etc.

</div>

<div class="job-container" data-country="France" data-industry="Internet" data-remote="No" data-sponsor-visa="Yes">

//Here the content of a job eg: Images, Title and etc.

</div>

<div class="job-container" data-country="Spain" data-industry="Finance" data-remote="Yes" data-sponsor-visa="No">

//Here the content of a job eg: Images, Title and etc.

</div>

and goes on....

C) jQuery

var filters = [];

$('#industry').on('change', function(){

var value = $(this).val();

filters['industry'] = value;

filteredResults();

});

$('#country').on('change', function(){

var value = $(this).val();

filters['country'] = value;

filteredResults();

});

$('#remote').on('change', function(){

var value = $(this).val();

filters['remote'] = value;

filteredResults();

});

$('#sponsor-visas').on('change', function(){

var value = $(this).val();

filters['visa'] = value;

filteredResults();

});

function filteredResults() {

$('.job-container').each(function(){

var industry = $(this).attr('data-industry');
var remote = $(this).attr('data-remote');
var visa = $(this).attr('data-visa');
var country = $(this).attr('data-country');

if ( filters['industry'] == industry ) { // HERE I WOULD LIKE TO DO THE SAME WITH ALL FILTERS

$(this).fadeIn('fast'); 

}
else {

$(this).fadeOut('fast');

}

});

}

所以我想要的是,当用户之前选择过滤器国家/地区时,已经选择了更改时的过滤器行业来保存过滤器行业并刷新具有相同行业和国家/地区的工作列表

抱歉我的英语不好,

希望能找到解决办法

最佳答案

迭代容器数据。如果任何过滤器不匹配,则将标志设置为 false

$('.job-container').each(function(){
   var isMatch = true, // true until a mismatch is found
       $cont = $(this), 
       container_data = $cont.data();

   $.each(container_data, function(key, value){
       // check if that filter has a value and if it doesn't match
       if(filters[key] && filters[key] !== value){
          isMatch = false;
          return false;// break each loop, no need to continue checking
       }
   }); 

   $cont[ isMatch ? 'fadeIn' :'fadeOut' ]('fast');

});

上面假设如果没有对特定过滤器进行选择,则应包含该项目

DEMO

关于javascript - 使用 jQuery 操作和过滤多个 html 数据属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39473852/

相关文章:

php - 在ajax函数中添加两个数字

Jquery - 当 div 内容更改时如何启动函数

android - 使用 Comparator 和 Custom ArrayAdapter 对 ArrayList 与对象进行排序

javascript - 如何根据从下拉菜单中选择的城市显示 Google map

c# - 新鲜的 MVC 3 项目给我奇怪的不引人注目的验证脚本错误

javascript - 如何比较数组中的每个数字? (javascript)

javascript - 如何停止警告框按回车循环?

jquery - Firefox 和 IE 处理 jQuery CSS 的方式有区别吗?

java - 避免重复记录 - HashSet

java - 读取 ArrayList 的最后一个索引时返回 null