【问题标题】:Filtering the divs with data attributes with multiple checkboxes使用多个复选框过滤具有数据属性的 div
【发布时间】:2014-05-02 20:03:01
【问题描述】:

我有一个具有多个数据属性的 div 结构,例如数据位置、数据名称。 我想根据我的代码中定义的位置和名称复选框过滤显示的 div。 就像我从位置复选框中检查某个位置一样,它应该只显示那些位置 div。对于名称复选框也是如此 但是当我同时选择名称和位置时,它应该比较两者并向我显示结合两者的 div。

<div class="content" data-name="Peter" data-location="US">Peter</div><br />
<div class="content" data-name="Willy" data-location="Mexico">Willy</div><br />
<div class="content" data-name="Roche" data-location="US">Roche</div><br />
<div class="content" data-name="George" data-location="Canada">George</div><br />
<div class="content" data-name="Pedro" data-location="Mexico">Pedro</div><br />

<input type="checkbox" name="name" id="Peter">Peter
<input type="checkbox" name="name" id="Willy">Peter
<input type="checkbox" name="location" id="US">US
<input type="checkbox" name="location" id="Mexico">US

所以如果我只选择 Peter 复选框,它应该显示所有由 Peter 产生的 div。如果我只选择美国位置 div,它应该只给出与美国相关的所有名称的 div 如果我选择彼得和美国复选框,那么它应该只给彼得与位置美国结果 div。

【问题讨论】:

  • 您有一些 html / javascript 代码供我们查看吗?
  • @Jorg-i 已经发布了 html。请帮助...
  • 我需要粘贴更多的总和来分析吗?
  • 查看以下插件:MixItUp 它允许您在 div 之间进行过滤
  • 有足够的答案供您构建以获得您想要的东西。所以,试一试吧。

标签: javascript jquery html css checkbox


【解决方案1】:

检查这个Updated Demo on jsfiddle jQuery

$('div>').change(function() {
$(".content").hide();
    if($(this).is(":checked")) {          
       $(".content[data-name="+this.id+"]").show();
       $(".content[data-location="+this.id+"]").show();    
    }

});

在 CSS 中,您需要设置显示以隐藏所有内容

.content{
display:none;
}

【讨论】:

  • 对不起先生。它显示不正确的结果。当您检查两个复选框时,例如一个用于名称,一个用于位置。您需要查看哪个 div 的名称为 peter,位置为 US。但根据你,你的代码在检查 name=peter 和 loca-US 时显示所有两个 div。理想情况下它应该显示一个。因为只有第一个 div 有 nam-peter 和 location-US
  • 非常感谢。正是我要找的东西。只是在这个中的一个小更正。当你检查彼得时,显示名称为彼得的 div,同时如果你也检查威利(表示 peter 和 willy 都被选中)那么它应该同时显示 peter 和 willy div,即所有四个 div。目前当你用 peter 检查 willy 时,它隐藏 peter div 而它应该保持 peter div 显示。
  • 其次,当你检查威利和墨西哥时,它会显示完全匹配的结果。那时威利和墨西哥的复选框是打开的。那时如果你也检查美国的复选框,那么它应该显示两个 div iewilly与墨西哥和威利与美国。但目前当你检查美国与墨西哥的威利时,它显示第二个复选框的 div,你只在检查了墨西哥后检查了 ieUS。但是非常感谢为要求共享的时间。
  • 欢迎您@user2839745,如果您觉得它有用,您可以接受答案.. :)
  • @user3321823-对于我告诉你上面评论的场景,你能不能对你给出的上述代码做一点小改动,非常感谢......谢谢你的及时帮助......
【解决方案2】:

我想您别无选择,只能在每次出现 change 事件时遍历所有 已检查 checkbox 并相应地隐藏/显示 divs 所以我会这样做:

jQuery(document).ready(function ($) {
    $("input[type=checkbox]").on("change", function () {
        if ($("input[type=checkbox]:checked").length == 0) {
            // no one is checked so show all
            $(".content").show();
        } else {
            // there is at least one checked
            $(".content").fadeOut(0); // hide all (again)
            // show only each of those that match
            $("input[type=checkbox]:checked").each(function () {
                $(".content[data-name=" + this.id + "]").fadeIn(100);
                $(".content[data-location=" + this.id + "]").fadeIn(100);
            }); // each
        };
    }); // on
}); // ready

JSFIDDLE

注意事项

  • 您可以使用 class 代替 input[type=checkbox] 元素
  • .on() 需要 jQuery 1.7+

【讨论】:

  • 你能帮我用代码 sn-p 来遍历所有复选框,因为你给出的上述代码不是我想要的。
  • 所以请先生帮助我
【解决方案3】:

试试这个

$("input[type=checkbox]").click(function(){
$(".content").hide();
$(".content[data-name="+this.id+"]").show();
$(".content[data-location="+this.id+"]").show();

});

demo

编辑

 $(".content").hide();
 $("input[type=checkbox]").click(function () {

 if (this.checked) {
     $(".content[data-name=" + this.id + "]").show();
     $(".content[data-location=" + this.id + "]").show();
 } else {
     $(".content[data-name=" + this.id + "]").hide();
     $(".content[data-location=" + this.id + "]").hide();
 }
 });

Updated fiddle

【讨论】:

  • 感谢您的帮助。但是有一两件事情出错了,休息很好。当您检查彼得复选框和墨西哥复选框时,它应该只显示数据名称为彼得和数据位置的 div作为墨西哥。但是当我运行您的代码时,它会同时显示墨西哥位置以及其他数据名称
  • 对不起,但还是一样。当你第一次像彼得复选框一样选中复选框时。然后你得到了彼得名字的 div,之后你像美国一样检查位置 div,那么你有比较两个复选框值并显示 divs.like Peter 作为名称和 US 作为位置。不应该出现其他名称。Like 只有第一个 div 应该是可见的。但是当你首先检查 peter 和 US 时使用你的代码,它显示 Roche另外,我们应该只获得名称为 peter 的 div。
猜你喜欢
  • 1970-01-01
  • 2021-07-31
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 2015-01-23
相关资源
最近更新 更多