带有输入的 jQuery 过滤器(包括/内部复选框)

Posted

技术标签:

【中文标题】带有输入的 jQuery 过滤器(包括/内部复选框)【英文标题】:jQuery filter with imputs (include / inside checkbox) 【发布时间】:2021-07-09 18:32:13 【问题描述】:

我想问是否有人知道如何解决我的问题。过滤适用于其他所有(我想不区分大小写),但在搜索“食物”后不会出现复选框。我需要创建一个带有复选框的类别列表。如果您搜索一个类别,您可以立即选中复选框

<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function()
  $("#myInput").on("keyup", function() 
    var value = $(this).val().toLowerCase();
    $("#myDIV *").filter(function() 
      $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
    );
  );
);
</script>
</head>
<body>

<h2>Filter</h2>
<!--Type something in the input field to search for a specific text inside the div element with id="myDIV" -->
<input id="myInput" type="text" placeholder="Search..">

<div id="myDIV">
  <p>dog</p>
  <div>master20</div>
  <button>Button</button>
  <p>Welcome5</p>
  <label class="important_class_for_me">Food
    <input type="checkbox">
    <span class="my_custom_checkmark"></span>
  </label>
</div>
  
</body>
</html>

【问题讨论】:

那种非常松散的结构不太利于你想做的事情。 【参考方案1】:

问题是字符*,选择器$("#myDIV *")。通过指定此字符,您将所有子代都称为parent - child - child - child ...

您只需要引用父 #myDIV 的第一个孩子。将* 替换为&gt;。像这样:

$("#myDIV >").filter(function()  ... 

$(document).ready(function () 
    $("#myInput").on("keyup", function () 
        var value = $(this).val().toLowerCase();
        $("#myDIV >").filter(function () 
            $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);
        );
    );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<h2>Filter</h2>
<!--Type something in the input field to search for a specific text inside the div element with id="myDIV" -->
<input id="myInput" type="text" placeholder="Search.." />

<div id="myDIV">
    <p>dog</p>
    <div>master20</div>
    <button>Button</button>
    <p>Welcome5</p>
    <label class="important_class_for_me">
        Food
        <input type="checkbox" />
        <span class="my_custom_checkmark"></span>
    </label>
</div>

【讨论】:

【参考方案2】:

你隐藏了 myDIV 中的每一个元素,不仅是吓人的孩子。

碰巧:

<input type="checkbox">
<span class="my_custom_checkmark"></span>

两者都是孩子,并且没有 .text(),因此它们会切换。

相反,只需通过将$("#myDIV *") 更改为$("#myDIV &gt; *") 来对恐吓孩子进行过滤

【讨论】:

以上是关于带有输入的 jQuery 过滤器(包括/内部复选框)的主要内容,如果未能解决你的问题,请参考以下文章

JS / jQuery - 用复选框过滤 div

AngularJS - 带有数字/长度的过滤复选框

带有复选框的jquery Datatables行分组

内部带有 jQ​​uery 对话框的表单不提交

DataTables案例不敏感搜索问题

使用带有 AngularJS 的复选框过滤数组