javascript – jQuery搜索过滤器显示列表项标题

前端之家收集整理的这篇文章主要介绍了javascript – jQuery搜索过滤器显示列表项标题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下列表
<ul id="fromList">
    <li class="header">-ABC-</li>
    <li class="item">123</li>
    <li class="item">258</li>
    <li class="item">189</li>
    <li class="item">545</li>

    <li class="header">-CDE-</li>
    <li class="item">789</li>
    <li class="item">215</li>
    <li class="item">897</li>
    <li class="item">999</li>

    <li class="header">-EFG-</li>
    <li class="item">701</li>
    <li class="item">566</li>
    <li class="item">511</li>       
</ul>

搜索该项目时,应显示列表项标题
例如,当我正在搜索’9′
应该显示

> -ABC-
> 189
> -CDE-
> 789
> 897
> 999

现在我只得到搜索列表:

function filter(element) {
  var value = $(element).val();
  $("#fromList li").each(function() {
    if ($(this).text().search(new RegExp(value,"i")) > -1) {
      $(this).show();
    } else {
      $(this).hide();
    }
  });
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type='text' id='txtList' onkeyup="filter(this)" />
<ul id="fromList">
  <li class="header">ABC</li>
  <li class="item">123</li>
  <li class="item">258</li>
  <li class="item">189</li>
  <li class="item">545</li>

  <li class="header">CDE</li>
  <li class="item">789</li>
  <li class="item">215</li>
  <li class="item">897</li>
  <li class="item">999</li>

  <li class="header">E</li>
  <li class="item">701</li>
  <li class="item">566</li>
  <li class="item">511</li>
</ul>

解决方法

您可以将 .prevAll() method.first() method组合,以便选择应显示的li的标题元素:
$(this).prevAll('.header').first().show();

Updated Example

function filter(element) {
    var value = $(element).val();
    $("#fromList li").each(function () {
        if ($(this).text().search(value) > -1) {
            $(this).show();
            $(this).prevAll('.header').first().show();
        } else {
            $(this).hide();
        }
    });
}

我建议使用unobtrusive JavaScript.我也缩短了你的代码一点.

Updated Example

$('#txtList').on('keyup',function () {
    var value = this.value;
    $('#fromList li').hide().each(function () {
        if ($(this).text().search(value) > -1) {
            $(this).prevAll('.header').first().add(this).show();
        }
    });
});

作为附注,如果要排除标题被选中,如果您要输入类似“ABC”,只需使用.not()方法来从选择中取消.header元素:

Updated Example

if ($(this).not('.header').text().search(value) > -1) {
    // ..
}
原文链接:https://www.f2er.com/jquery/154343.html

猜你在找的jQuery相关文章