【问题标题】:Jquery toggle list elements by inner element's textsJquery通过内部元素的文本切换列表元素
【发布时间】:2020-02-27 14:35:08
【问题描述】:

我不知道为什么我的过滤器功能不适用于切换li 元素。


JavaScript:

$("#searchbox1").on("keyup", function() {
   var value = $(this).val().toLowerCase();
   $("#menulist li").filter(function() {
      $(this).toggle($(this).children("span").text().toLowerCase().indexOf(value) > -1)
   });
});  

HTML:

<ul name="menulist" id="menulist" class="list-group grid-container">
    <li class="list-group-item d-flex flex-row justify-content-center align-items-center">
        <span>Yeni ürün ekle</span>
        <div class="btn-group btn-group-sm ml-auto" role="group">

            <a class="btn btn-success" href="/restaurant/additem">
                <i class="fas fa-plus"></i>
            </a>

        </div>
    </li>
    <li name="bira" class="list-group-item d-flex flex-row justify-content-center align-items-center">
        <span>bira</span>
        <div class="btn-group btn-group-sm ml-auto" role="group">
            <a href="/restaurant/edititem/-10" class="btn btn-success"><span class="fas fa-edit"></span></a>
            <a href="/restaurant/delete/-10" class="btn btn-danger"><span class="fas fa-trash-alt"></span></a>
        </div>
    </li>
    <li name="patates kızartması" class="list-group-item d-flex flex-row justify-content-center align-items-center">
        <span>patates kızartması</span>
        <div class="btn-group btn-group-sm ml-auto" role="group">
            <a href="/restaurant/edititem/-11" class="btn btn-success"><span class="fas fa-edit"></span></a>
            <a href="/restaurant/delete/-11" class="btn btn-danger"><span class="fas fa-trash-alt"></span></a>
        </div>
    </li>
</ul>

想要的效果:

我只想要一个简单的搜索框效果,但列表项不会去任何地方。当我玩这样的代码时:

$("#menulist span").filter(...)

我可以看到所有span 元素根据搜索值切换,但我想隐藏li 元素,与搜索值不匹配。我错过了什么,但是什么?

【问题讨论】:

  • 使用$(this).parent().toggle(...); 而不是$(this).toggle(...);

标签: javascript jquery html css list


【解决方案1】:

您的过滤代码实际上是正确的!因此无需更改任何 JavaScript。


那么问题是什么?

您的 li 元素都具有 Bootstrap 4 类 d-flex。这是一个问题,因为在过滤列表时,它会给出与 CSS display: none; 不匹配的元素。但是,由于d-flex!important 值,因此无法应用。这意味着每当您的代码尝试将您的 li 设置为 display: none 时,它将被 d-flex 添加的 display: flex !important 属性覆盖。


那么我该如何解决这个问题?

通过从所有 li 元素中删除 d-flex 类,并使用一些自定义 CSS 将它们设置为 display: flex;

.list-group-item {
  display: flex;
}

示例:

JSFiddle上查看固定版本。

【讨论】:

  • 感谢您的关注。这样做之后,现在,该函数只检查最后一个列表项。如果匹配,它不会隐藏其他整个
      留在那里。如果我搜索其他
    • 元素,它会隐藏整个列表。
  • 我猜你们误解了我的““但我当然只是想将列表元素作为一个整体隐藏起来。”“”这个词。我正在将我给出的示例与 span 进行比较。我不是这个意思隐藏整个列表,只隐藏不匹配的列表。我现在正在编辑问题。
  • 你是真正的mvp。非常感谢。
  • 没问题,很高兴能帮上忙! :)
猜你喜欢
  • 2010-11-08
  • 1970-01-01
  • 2013-07-06
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多