【问题标题】:Filter list and its children in jqueryjquery中的过滤器列表及其子项
【发布时间】:2023-03-05 09:03:01
【问题描述】:

这是我的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 元素起作用,并且上面的代码正在运行,但我无法在每个列表下隐藏卡片。我该怎么做?

【问题讨论】:

    标签: javascript jquery jquery-mobile bootstrap-4


    【解决方案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)
            });
        });
    

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

    【讨论】:

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

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

      中的单词

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2021-10-14
    • 1970-01-01
    • 2011-11-04
    • 2018-01-25
    相关资源
    最近更新 更多