使用 jQuery 过滤多个选择字段 [英] Multiple select fields filtering with jQuery

查看:26
本文介绍了使用 jQuery 过滤多个选择字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试用 JS 创建简单的过滤,但我在多个选择字段时遇到问题,它们不能协同工作,结果很疯狂(有时什么也没有显示).如果我只使用一个选择,一切都很好,当我尝试添加第二个时,或者第三个结果不正确或我得到空白页.

这是我的代码:https://jsfiddle.net/au6jbsL5/

这是我的过滤器功能(我有 3 个功能 - 每个选择组一个)

$('select#sort-cost').change(function() {var filter = $(this).val()过滤器列表(过滤器);});函数过滤器列表(值){var list = $(".news-list .news-item");$(list).fadeOut("fast");如果(值==全部"){$(".news-list").find("article").each(function (i) {$(this).delay(100).slideDown("fast");});} 别的 {$(".news-list").find("article[data-category*=" + value + "]").each(function (i) {$(this).delay(100).slideDown("fast");});}}

解决方案

这里有两个问题,一个是你覆盖了你的函数,所以当你只有一个的时候你认为你有三个,但实际上你没有一次过滤所有过滤器.

您在这里需要的不是三个复制粘贴的函数,而是一个每次发生变化时应用所有三个过滤器的函数.

我还将它更改为使用正则表达式而不是 .find(),这允许它们链接在一起并允许all"的自然行为,而不是使用一堆 if 语句.

//如果任何过滤器发生变化$('select').change(function() {运行所有过滤器();});函数 runAllFilters() {var list = $(".news-list .news-item");$(list).fadeOut("fast");var 过滤 = $(".news-list 文章");//获取所有过滤器值var cost = $('select#sort-cost').val();var city = $('select#sort-city').val();var age = $('select#sort-age').val();//基于所有的过滤器过滤 = 过滤.过滤器(功能(){return RegExp(cost).test($(this).attr("data-category")) &&RegExp(age).test($(this).attr("data-age")) &&RegExp(city).test($(this).attr("data-city"));});//如果没有结果则显示消息过滤后的长度 === 0?$('.news-list').append("<p id='noresults'>没有结果!</p>"): $('#noresults').remove()//显示它们过滤.每个(功能(我){$(this).delay(100).slideDown("fast");});};

这种方法也减少了代码中的大量重复.

我在 HTML 中唯一更改的是将值全部"更改为."这样你就不需要一堆 if 语句;在正则表达式."匹配一切,所以它按原样工作.


                
            
发送“验证码”获取 | 15天全站免登陆