使用 jQuery 使用值和类根据复选框过滤结果

2023-12-07

首先,这是我现在所拥有的一些东西:链接到 JSFiddle,代码如下:

<!DOCTYPE html>   
<head>
<title>Homes Selection Tester</title>
<style>
body {width: 100%;}
#wrapper {width: 640px;overflow: auto;}
ul li {list-style-type: none;}
#aptresults {width: 300px;float: left;}
#selections {width: 330px;float: left;}
</style>
</head>
<body>

<div id="wrapper">
    <div id="content">

        <div id="heading">
            <h1 class="inline">Homes</h1>
        </div>

        <div id="selections">
            <b>Oppervlakte</b>
            <ul class="apt-opper">
                <li >
                    <input type="checkbox" value="o50" />
                    <label for="o50">50m2 - 100m2</label>
                </li>
                <li >
                    <input type="checkbox" value="o100" />
                    <label for="o100">100m2 - 150m2</label>
                </li>
                <li >
                    <input type="checkbox" value="o150" />
                    <label for="o150">150m2 - 200m2</label>
                </li>
                <li >
                    <input type="checkbox" value="o200" />
                    <label for="o200">200m2 +</label>
                </li>
            </ul>

            <b>Type</b>
            <ul class="apt-type">
                <li >
                    <input type="checkbox" value="tPe" />
                    <label for="tPe">Penthouse</label>
                </li>
                <li >
                    <input type="checkbox" value="tV" />
                    <label for="tV">Villa</label>
                </li>
                <li >
                    <input type="checkbox" value="tPa" />
                    <label for="tPa">Panorama</label>
                </li>
                <li >
                    <input type="checkbox" value="tU" />
                    <label for="tU">Urban</label>
                </li>
                <li >
                    <input type="checkbox" value="tZ" />
                    <label for="tZ">Zuid</label>
                </li>
            </ul>

            <b>Prijs</b>
            <ul class="apt-price">
                <li >
                    <input type="checkbox" value="p1" />
                    <label for="p1">1.000.000 - 2.000.000</label>
                </li>
                <li >
                    <input type="checkbox" value="p2" />
                    <label for="p2">2.000.000 - 3.000.000</label>
                </li>
                <li >
                    <input type="checkbox" value="p3" />
                    <label for="p3">3.000.000 - 4.000.000</label>
                </li>
                <li >
                    <input type="checkbox" value="p4" />
                    <label for="p4">4.000.000 - 5.000.000</label>
                </li>
            </ul>

            <b>Balkon</b>
            <ul class="apt-balkon">
                <li >
                    <input type="checkbox" value="b50" />
                    <label for="b50">50m2 - 100m2</label>
                </li>
                <li >
                    <input type="checkbox" value="b100" />
                    <label for="b100">100m2 - 150m2</label>
                </li>
                <li >
                    <input type="checkbox" value="b150" />
                    <label for="b150">150m2 - 200m2</label>
                </li>
                <li >
                    <input type="checkbox" value="b200" />
                    <label for="b200">200m2 +</label>
                </li>
            </ul>
        </div>

        <div id="aptresults">
            <div class="o50 tU p1 b50">50m2 - Urban - 1mil - 50m2 balkon</div>
            <div class="o100 tZ p2 b100">100m2 - Zuid - 2mil - 100m2 balkon</div>
            <div class="o150 tV p3 b150">150m2 - Villa - 3mil - 150m2 balkon</div>
            <div class="o200 tPa p4 b200">200m2 - Panorama - 4mil - 200m2 balkon</div>
            <div class="o50 tPe p1 b50">50m2 - Penthouse - 1mil - 50m2 balkon</div>
            <div class="o100 tU p2 b100">100m2 - Urban - 2mil - 100m2 balkon</div>
            <div class="o150 tV p3 b150">150m2 - Villa - 3mil - 150m2 balkon</div>
            <div class="o200 tZ p4 b200">200m2 - Zuid - 4mil - 200m2 balkon</div>
            <div class="o50 tPe p3 b50">50m2 - Penthouse - 3mil - 50m2 balkon</div>
            <div class="o100 tU p2 b100">100m2 - Urban - 2mil - 100m2 balkon</div>
            <div class="o50 tU p1 b50">50m2 - Urban - 1mil - 50m2 balkon</div>
            <div class="o100 tZ p2 b100">100m2 - Zuid - 2mil - 100m2 balkon</div>
            <div class="o150 tV p3 b150">150m2 - Villa - 3mil - 150m2 balkon</div>
            <div class="o200 tPa p4 b200">200m2 - Panorama - 4mil - 200m2 balkon</div>
            <div class="o50 tPe p1 b50">50m2 - Penthouse - 1mil - 50m2 balkon</div>
            <div class="o100 tU p2 b100">100m2 - Urban - 2mil - 100m2 balkon</div>
            <div class="o150 tV p3 b150">150m2 - Villa - 3mil - 150m2 balkon</div>
            <div class="o200 tZ p4 b200">200m2 - Zuid - 4mil - 200m2 balkon</div>
            <div class="o50 tZ p3 b150">50m2 - Zuid - 3mil - 150m2 balkon</div>
            <div class="o100 tU p2 b100">100m2 - Urban - 2mil - 100m2 balkon</div>
        </div>
    </div>
</div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
 $(document).ready(function(){
     $('#aptresults div').show();

     $('input[type="checkbox"]').click(function(){
         select()
     })
 });

function select()
{
    $('#aptresults div').hide();

    var $div=$('#aptresults div');
    var check=false;    
    $('input[type="checkbox"]:checked').each(function(){
            var css=$(this).val();                    
            $div=$div.filter('.'+css);

        check=true;
    })

    if(check==true || check==false) $div.show();
}
</script>
</body>
</html>

基本上我有一个家庭列表,每个家庭的属性分为不同的类别。例如,一套房屋面积在 50-100 平方米之间,属于 X 型,价格在 1 到 200 万之间,有一个阳台,面积在 50-100 平方米之间。
有 4 个属性,每个属性都有自己的值,例如有 5 种不同类型的房屋。

最后,用户必须能够对各种属性和相应的值进行一项或多项选择。当用户这样做时,应过滤可用房屋的列表。例如,假设用户正在寻找 50-100 平方米和 100-150 平方米之间的房屋,则应选中两个复选框并显示相应的结果。

到目前为止,由于其他帖子中的一些有用答案,我已经可以一次过滤列表中的一个属性。

如果您查看小提琴,您会发现如果选中 50-100m2 的框,它会正确过滤,并且仅显示与过滤器匹配的房屋。如果您随后选中“城市”复选框,系统会进一步过滤结果,并且仅显示 2 个结果。取消选中所有框将按预期返回原始列表。

现在,如果我选择 50-100m2 和 100-150m2,结果为空。我希望得到 12 个结果(前者 6 个,后者 6 个)。在这些结果中,用户还应该能够检查/选择其他属性,以便在结果列表中进一步深入。

问题是,我怎样才能让它按预期工作?我正在做的事情是否在正确的轨道上?如果是的话,我在这里错过了什么?

感谢您可能得到的任何答案!


不要在 .each-loop 中覆盖 $div,而是收集要过滤的 css 类并在单个过滤器操作中过滤所有项目,如下所示:

$('input[type="checkbox"]:checked').each(function(){
        var css=$(this).val();
        filter.push('.'+css);
})

$div.filter(filter.join(',')).show();

完全摆弄https://jsfiddle.net/9zxrby22/1/

请注意它如何作为 OR 过滤器工作,甚至跨不同的组(oppervlakte、type、prijs 等)。如果任何类匹配,则会显示该项目,这可能不是您想要的。

如果您想要跨组进行 AND 过滤,请循环遍历分组复选框并覆盖 $div 变量,如下所示:https://jsfiddle.net/9zxrby22/2/

$('ul').each(function()
{
    filter = [];
    check = false;

    $(this).find('input[type="checkbox"]:checked').each(function()
    {
        var css=$(this).val();          
        filter.push('.'+css);
        check = true;
    });

    if (check)
    {
        $div = $div.filter(filter.join(','));
    }
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 jQuery 使用值和类根据复选框过滤结果 的相关文章

  • 如何将内部 div 与外部 div 的底部对齐?

    我需要将内部 div 与外部 div 的底部对齐 我的代码如下所示 div class myOuterDiv div class div1 floatLeft Variable content here div div class div2
  • firebug 打开后断点重复触发

    当我在一个站点上打开 firebug 时 我无法分析任何内容 因为每隔几秒就会在该行上触发一个断点 function function a try function b i if i i length 1 i 20 0 function c
  • 使用 jquery UI 调整大小的分屏 div

    我心中有一个设计 涉及 html 中的拆分面板视图 类似于 winforms 拆分面板 我一直在尝试jQuery UI 可调整大小 http jqueryui com demos resizable我喜欢这个功能 我只是似乎无法协调两者的大
  • 如何在严格模式下设置元素样式属性?

    Given body document getElementsByTagName body 0 iframe document createElement iframe iframe src protocol settings script
  • .addClass 仅添加到无序列表中单击的项目符号

    我有一个简短的无序列表 其中有两个项目符号 我添加了一些 Javascript 这样当我单击项目符号时 它会向其中添加一个类 问题是 它将该类添加到所有现有的 li 中 而不仅仅是我单击的那个 这是 JSFiddle http jsfidd
  • 为什么 jQuery 的 .change() 事件仅在单击鼠标右键时触发?

    我在使用 jquery 时遇到了问题 change 当我修改输入元素时发生事件 据说 每当我对所述元素进行实时更改时 该事件就会触发 但就我而言 它仅在我按下右键单击按钮后才会触发 这是我的代码laravel框架 HTML div clas
  • 使用 javascript/jquery 检查 .css 样式表的名称

    我正在尝试为论坛制作一个小 chrome 扩展 但我只希望它在论坛的某个区域中工作 问题是我不能只做 matches subforum 因为该论坛中的线程无法通过 URL 区分它们所在的子论坛 subforum 有自己的 css 样式表 所
  • this 关键字是构造函数中的窗口对象

    好吧 所以我以为我理解了这一点 没有双关语的意思 但显然不是 var Constructor function var internalFunction function return this window this myMethod f
  • Web API 复杂参数属性均为 null

    我有一个 Web API 服务调用可以更新用户的首选项 不幸的是 当我从 jQuery ajax 调用中调用此 POST 方法时 请求参数对象的属性始终为 null 或默认值 而不是传入的值 如果我使用 REST 客户端调用相同的方法 我使
  • 在 Promise 中中止 ajax 请求

    我正在构建一个表单验证并学习承诺 我决定使用承诺模式实现异步验证函数 var validateAjax function value return new Promise function resolve reject ajax data
  • 如果没有其他函数链接到承诺,则默认行为

    我想打开一个 确认您要取消对话框 如果没有链接其他功能 则默认导航回页面 window history back 如果我传递回调 我可能会这样做 function openCancelModal form callback if form
  • 有条件地使用 Node.js 提供两个 React 构建

    我有两个基于设备向客户端提供服务的 React 应用程序 我使用 Node js 和 Express 来实现这一点 我借了static资产处理部分来自这个问题在这里 https stackoverflow com questions 644
  • Javascript变量是一个对象数组,但无法访问元素

    我正在使用 Firebase 数据库和 Javascript 并且我有代码可以获取每个类别中的每个问题 我有一个名为 类别 的对象 其中包含名称 问题和问题计数 然后它将被推入类别列表 questionsPerCategory 在我刚刚做的
  • 将 ERB 与 Handlebars 模板结合使用

    我有一个使用 ajax 创建新标签的模式 它使用 Tags 参数执行 POST 方法 而无需重新充电视图 因此 我希望根据所选的 price type 参数来呈现一个或另一个价格 div 我使用 Handlebars 所以我想这不是 rub
  • jquery validate - 在验证发生之前替换字段中的逗号

    看来 即使使用当前的验证插件 如果您想使用 min 进行验证 也不能在值中包含逗号 我在github上发现了几个月前 11个月 提交的补丁来修改源 js文件 但它仍然没有发布 因此 我没有修改源 js 文件 而是尝试找出如何在验证之前替换逗
  • 如何使用FileSystem API的window.requestFileSystem?

    我用 JavaScript 编写了以下代码 JavaScript 代码 var fs null function initFS window requestFileSystem window requestFileSystem window
  • 带分页的过滤表

    我想要一个带有分页的表格 同时在表格标题中带有搜索框 所以使用这段代码jsfiddle分页 http jsfiddle net Xugej 1445 I want output like this 这是我的过滤代码 function sea
  • Javascript this 关键字 - 函数内部

    我正在尝试理解this关键字JavaScript 我在 chrome 控制台上做了一些测试 发现了两个不同的结果 但我期望它们是相同的 var myTest myTest test1 function return this this Ob
  • 无法使用 javascript 建立与安全 Websocket 服务器的连接

    我的开发环境是这样的 操作系统 微软Windows 10 PHP 框架 Laravel 8 0 PHP 版本 7 4 Websocket 服务器 cboden ratchet 0 4 3 WAMP 服务器 3 2 0 Apache 2 4
  • 获取类的公共属性而不创建它的实例?

    假设我们有一个 JavaScript 类 var Person function function Person name surname this name name this surname surname Person prototy

随机推荐

  • jquery改变用户滚动的背景颜色

    jquery 是否有可能在用户向下滚动页面时背景动画从 50 白色变为 90 白色或其他 所以首先是颜色rgba 255 255 255 5 当用户滚动到颜色下方 210px 时become rgba 255 255 255 9 更新后的更
  • Darwin/MacOS 是否修改了 Bash?

    我想知道使用 Bash 内置命令的 Bash 脚本的可移植性 据我了解 每种 UNIX 风格都倾向于修改各种 UNIX 实用程序 但他们是否倾向于不理睬 Bash 和 Bash 内置函数呢 尤其是 MacOS 呢 据我所知 bash 在 M
  • 从 C++ 扩展中获取 MIME 类型

    有什么方法可以在给定文件扩展名的情况下获取 C 中的 MIME 类型吗 我读过有关 HKEY CLASSES ROOT 的内容 但老实说我不知道 如何使用它 我想要的是作为输入 string extension pdf string ext
  • SWT 是否分发可在任何受支持的操作系统上运行的 JAR?

    The SWT项目目前为每个受支持的操作系统维护一个可分发的版本 例如 swt 3 4 2 win32 win32 x86 zip swt 3 4 2 gtk linux x86 zip swt 3 4 2 carbon macosx zi
  • EF 6 - 如何正确执行并行查询

    创建报告时 我必须执行 3 个涉及相同上下文的独立实体的查询 因为它们很重 所以我决定使用 ToListAsync 为了让它们并行运行 但是 令我惊讶的是 我得到了一个例外 使用 EF 6 并行执行查询的正确方法是什么 我应该手动启动新任务
  • 为什么使用 LWUIT 的三星手机不支持阿拉伯字体?

    我已经在一些三星手机上测试了我的移动应用程序以进行测试 三星 Corby b3410 和三星 c6712 这些手机上未显示阿拉伯字体 但它可以在诺基亚手机上正常工作 我在用着System font用于显示阿拉伯字体 为什么这些手机不支持 如
  • Latin-1 / UTF-8 编码 php

    我有一个 UTF 8 编码与 Latin 1 混合的数据库 我认为这就是问题所在 这就是字符在数据库中的样子 should be 当我将标题设置为 然后字符就出来了 当我删除标题时 它们会像数据库中一样出现 我希望他们像这样出来 如果可能的
  • Core Haskell 将类型应用于函数意味着什么?

    我为 Core Haskell 编写了一个自定义的漂亮打印机 以便更好地研究 Core 的结构 这台漂亮打印机的要点是 它需要核心模块并在输出中包含数据构造函数 默认情况下Outputable执行好像不行 这是我运行漂亮打印机的模块的代码
  • 如何将多域用户电子邮件添加到 Azure AD

    我们有三个不同的网站 我们希望使用 Azure AD 来实现单点登录 我的问题是如何将可能拥有不同电子邮件地址的用户添加到 Azure AD 通过 API 例如 电子邮件受保护 电子邮件受保护 电子邮件受保护 etc 当我尝试通过 API
  • 如何在 Eclipse 编辑器中打开外部浏览器

    如何以编程方式使用 Eclipse 插件中的打开选项打开 Safari 等外部浏览器 try PlatformUI getWorkbench getBrowserSupport getExternalBrowser openURL new
  • 使用 PHP 创建 Web 服务

    我想用 PHP 创建一个可供不同消费者 网页 Android 设备 iOS 设备 使用的 Web 服务 我来自 Microsoft 背景 因此对如何使用 C 等进行操作很满意 理想情况下 我希望能够提供可以发送 JSON 的 REST 服务
  • 如何使用 React 导航在 mobx 商店中导航?

    我可以用this props navigation从屏幕组件进行导航 我应该如何在 mobx 存储文件中执行类似操作 或者我应该在商店中进行导航吗 我读了无需导航道具即可导航文章 但它似乎只适用于屏幕组件 对吗 有人说用global变量来存
  • 具有选择类的语义 UI 多级下拉列表不会展开

    当我尝试使用下拉菜单时search selection并选择一个子类别 它会展开到自身中 并且下拉列表中会出现一个小滚动条 如果我不添加search selection它似乎运行得很好 JSFiddle https jsfiddle net
  • JavaScript 图像 URL 验证

    我需要验证图像 url 以检查该 url 是否是以下任何扩展名的图像 jpeg jpg gif png 示例 当我们验证此 url 时http www example com asdf jpg它应该给我们真正的价值和像这样的网址http w
  • 有没有办法在热图中保留聚类但减少观察数量?

    我的数据集包含 20 列 90 个观察值 行 我生成了一个非常简洁的热图 它使用 pheatmap 包将我的数据分为两组 虽然它并不完全干净 但树状图的两个簇几乎根据我的条件将我的样本分为两个不同的组 现在我想将这组 90 个观察值减少到大
  • 单引号和双引号 html 属性之间的功能差异是什么?

    Let sEncodedHref代表一个HttpUtility HtmlAttributeEncode 是字符串 生成的 html 之间是否存在功能差异 如下所示 String Format span class blue src 0 sE
  • 从 netcdf 中提取特定经纬度的值

    我正在尝试读入 R 的 netCDF 文件 网络CDFchirps v2 0 1981 days p05 nc是从这里下载的 ftp ftp chg ucsb edu pub org chg products CHIRPS 2 0 glob
  • 反转字符串顺序

    我想反转字符串的顺序 例如 乔 红 红乔 我相信相反的方法对我没有帮助 因为我不想反转每个字符 只是切换单词 首先 您需要定义 单词 的含义 我假设您只需要用空格分隔的字符串 在这种情况下 我们可以这样做 join reversed s s
  • 如何在pygame中使用其他字体?

    我已经下载了一种名为 redline ttf 的字体 我想在 pygame 中使用它 我只想在屏幕上打印文本 我在文件夹 pygame gt lib 中找到了一种名为 freesansbold ttf 的基本字体 我已将下载的字体放在同一个
  • 使用 jQuery 使用值和类根据复选框过滤结果

    首先 这是我现在所拥有的一些东西 链接到 JSFiddle 代码如下 div div div div