jquery中的过滤器列表及其子项

Posted

技术标签:

【中文标题】jquery中的过滤器列表及其子项【英文标题】:Filter list and its children in jquery 【发布时间】:2019-07-12 04:35:26 【问题描述】:

这是我的html代码:

<input class="form-control" id="myInput" type="text" placeholder="Search..">
<ul class="list-group" id="myList" data-role="listview" data-divider-theme="a" data-inset="true">
    <li data-role="list-divider" role="heading" class="list-group-item">
         <h1>b - B</h1>
    </li>
    <li data-role="collapsible" data-inset="false">
         <h3>backbiting</h3>
             <div class="card">
                 <div class="card-body text-left">
                      <div class="card-text"><p>Loreum Ipsum</p></div>
                 </div>
             </div>
    </li>

这是我正在使用的 jquery:

$("#myInput").on("keyup", function() 
    var value = $(this).val().toLowerCase();
    $("#myList h3").filter(function() 
        $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
    );
);

我希望搜索/过滤器对 li > h3 元素起作用,并且上面的代码正在运行,但我无法在每个列表下隐藏卡片。我该怎么做?

【问题讨论】:

【参考方案1】:

我认为你在隐藏 li 和 h3 时遇到了问题。 在这里,您只选择了#myList h3,因此只有该段将隐藏在过滤器中。要隐藏 li ,您必须同时选择这两个元素,即该元素的父级。因此,不要选择 #myList h3 选择 #myList li 并在过滤器中使用 $(this).find('h3').text() 进行过滤器,如下所示...

$("#myInput").keyup(function() 
        var value = $(this).val().toLowerCase();
        $("#myList li").filter(function() 
            $(this).toggle($(this).find('h3').text().toLowerCase().indexOf(value) > -1)
        );
    );

我认为这应该可以解决您的问题。

【讨论】:

如果我这样做,那么过滤器在 上工作,我只想过滤包含在

内的文本。因此,在使用搜索时也会显示包含在 中的单词。我只想过滤包含在

中的单词

以上是关于jquery中的过滤器列表及其子项的主要内容,如果未能解决你的问题,请参考以下文章

CSharp使用另一个列表及其嵌套列表过滤带有LINQ查询的列表

jQuery概述及其选择器

如何过滤列表视图中的内部子元素以及使用 Jquery 在移动应用程序中将字母滚动条添加到列表视图的任何简单方法

jQuery过滤多个数据属性

如何使用 jQuery 为表格制作下拉列表过滤器?

对许多实体和实体关系进行过滤的核心数据提取