当前位置: 首页 > 知识库问答 >
问题:

使用JQuery通过带复选框的data-attribute筛选div内容

况喜
2023-03-14

我在div中有一个卡片列表,类名为.cards-list,我希望使用复选框按数据属性筛选这些卡片

我尝试了下面的jQuery代码,但它不工作,在选中复选框后,我的所有卡片都被隐藏,并且当我取消选中它时不会再次显示

HTML


<!-- FILTER CHECKBOX -->
<div class="form-check">
   <input class="cardCheckBox" type="checkbox" value="foo">
</div>
<div class="form-check">
   <input class="cardCheckBox" type="checkbox" value="xyz">
</div>

<!-- CARDS LIST I WANT TO FILTER -->
<div class="cards-list mt-2">
    
<div class="card" data-category="foo">
      <div class="card-body">
         <h2>card title</h2>
      </div>
    </div>

 <div class="card" data-category="xyz">
      <div class="card-body">
         <h2>card title</h2>
      </div>
    </div>

 <div class="card" data-category="foo">
      <div class="card-body">
         <h2>card title</h2>
      </div>
    </div>
</div>


jQuery

$(".cardCheckBox").change(function () {
   var value = $(this).val();
   if (this.checked) {
      $(".cards-list.card").filter(function () {
         $(this).toggle($(this).data("category") == value);
      });
   } else {
       $(this).toggle($(this).data("category") == value);
   }
});

共有2个答案

漆雕彦
2023-03-14

你犯了几个错误。

if语句中需要this.checked==truethis.checked提供truefalse,您需要指定要查找的内容。

也不需要过滤器,你可以在你的元素选择器中做过滤(女巫也不是正确的目标):

$(".cards-list  .card[data-category="+value+"]")

如果您将.cards-list.card放在一起,则表示它们彼此相邻,在您的示例中,.cards位于.cards-list内部。

null

$(".cardCheckBox").change(function () {
   var value = $(this).val();
   //console.log(value);
   if (this.checked == true) {
   //console.log(true);
      $(".cards-list .card[data-category="+value+"]").hide();
      }else{
      $(".cards-list .card[data-category="+value+"]").show();
      }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!-- FILTER CHECKBOX -->
<div class="form-check">
   <input class="cardCheckBox" type="checkbox" value="foo">
</div>
<div class="form-check">
   <input class="cardCheckBox" type="checkbox" value="xyz">
</div>

<!-- CARDS LIST I WANT TO FILTER -->
<div class="cards-list mt-2">
    
<div class="card" data-category="foo">
      <div class="card-body">
         <h2>card title foo</h2>
      </div>
    </div>

 <div class="card" data-category="xyz">
      <div class="card-body">
         <h2>card title xyz</h2>
      </div>
    </div>

 <div class="card" data-category="foo">
      <div class="card-body">
         <h2>card title foo</h2>
      </div>
    </div>
</div>
栾鸣
2023-03-14

代码说明:

null

// Cache your elements
const $cards = $("[data-category]");
const $cardsCkb = $(".cardCheckBox");

$cardsCkb.on("change", function() {
  
  // Create an Array of checked values
  const checkedArr = $cardsCkb.filter(":checked").get().map(el => el.value);
  
  // Show all and exit if no filter is active
  if (!checkedArr.length) return $cards.removeClass("is-hidden");
    
  // Finally, use jQuery's .toggleClass() and JS's Array.prototype.includes()
  $cards.each(function() {
    const category = $(this).data("category");
    $(this).toggleClass("is-hidden", !checkedArr.includes(category));
  });

});
.card.is-hidden {
  display: none;
}
<!-- FILTER CHECKBOX -->
<div class="form-check">
  <label><input class="cardCheckBox" type="checkbox" value="foo"> foo</label>
</div>
<div class="form-check">
  <label><input class="cardCheckBox" type="checkbox" value="xyz"> xyz</label>
</div>

<!-- CARDS LIST I WANT TO FILTER -->
<div class="cards-list mt-2">

  <div class="card" data-category="foo">
    <div class="card-body">
      <h2>foo 1</h2>
    </div>
  </div>

  <div class="card" data-category="xyz">
    <div class="card-body">
      <h2>xyz 1</h2>
    </div>
  </div>

  <div class="card" data-category="foo">
    <div class="card-body">
      <h2>foo 2</h2>
    </div>
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
 类似资料:
  • 首先,我试图使选择所有复选框,如果我单击表头中的选择所有复选框,整个表行将选择并显示一个复选框反向消息,即我选择了多少复选框。这里的问题是,如果我单击select all复选框,反向消息不会显示楼上的表,即我选择了多少行。 其次,如果我从任何列中筛选任何数字,相同的数字将显示同一列中有多少行具有相同的数字。如果我选中了所有复选框,那么反向消息将显示我选中了多少行复选框。这里,问题是显示整个表行计数

  • 我一直在研究这个问题,但我找不到一个带有复选框的get drawable的解决方案。我试图做的是,当你点击这个特定的复选框时,它会过滤相应颜色的复选框。顺便说一下,这是一个片段。所以,我有可以是红色、黄色或绿色的复选框。如果用户点击它们,它会改变颜色。例如,我有一个黄色的复选框,它是chkProgress,当它被单击时,我想找到所有黄色的复选框,并筛选黄色的复选框。所以,我有可绘制的ID,我需要得

  • 问题内容: 我有两行复选框。当用户单击任何单个复选框(在特定行中)时,我想在PHP的总和中添加一个数字。如果他取消选择单个复选框,那么我想实时地从总数中减去而不刷新页面。 我的问题是我的AJAX调用的数据字段中有什么内容? 这是正确的方法吗? HTML JQUERY PHP 问题答案: 尝试:

  • 问题内容: 我有一个带有很多表单字段(12 xn行)的表单。每行中的第一个字段(代表产品)是一个类似于以下内容的复选框: 每个复选框的值都是唯一的。 我正在尝试将检查后的值发送到PHP脚本以通过Ajax进行处理。我遇到的问题是将ID正确获取到服务器。我尝试使用以下几种方法: 和 但是这些都会导致在服务器上获取此信息: 我可以序列化整个表单并将其发送过来,但是这可能导致发送的许多数据将不被使用。 如

  • 问题内容: 我想从MYSQL数据库中删除多行。我已经创建了这个delete.php文件,以选择各种链接并使用复选框将其删除。 这似乎没有删除任何行。我的数据填充在表中。我猜问题出在PHP代码上。请帮我在这里。 问题答案: 您应该将其视为这样的数组, 只有这样,您才能对其计数并循环删除。 您还需要将数据库连接传递给查询。 您的没有包括:

  • 问题内容: 我目前正在使用一个必须能够选中/取消选中复选框的系统。每当它更改状态时,我都需要进行jquery并调用ajax来更新页面。 我的问题是-我该怎么做,以便更新? 提前致谢。 问题答案: 例如,您可以这样做: 首先,您必须查看该复选框是否已选中: 您可以通过Ajax加载特定的内容:

  • 问题内容: 我想做这样的事情来使用 jQuery 打勾: 要么 这样的事情存在吗? 问题答案: 现代jQuery 用途: DOM API 如果只使用一个元素,则始终可以访问底层元素并修改其属性: 使用and 方法代替此方法的好处是它们将对所有匹配的元素进行操作。 jQuery 1.5.x及以下 该方法不可用,因此您需要使用。 请注意,这是jQuery 1.6版之前的单元测试所使用的方法,并且比使用

  • 问题内容: 我需要有关jQuery选择器的帮助。假设我有一个标记,如下所示: 除了用户单击时,如何获取所有复选框? 问题答案: 一个更完整的示例适用于您的情况: 当被点击复选框,该复选框的状态进行检查,并在当前形式的所有复选框被设置为相同的状态。 请注意,您无需从选择中排除该复选框,因为该复选框的状态将与其他所有复选框相同。如果出于某些原因确实需要排除,则可以使用以下方法: