javascript - 在 keyup 事件中找不到结果时显示

标签 javascript jquery

我在 div 上有多个名为 post-content 的类,并且有一个搜索框,它的事件在 keyup 上触发。如果没有匹配的结果,我想显示“没有匹配的结果

$('.post-content').each(function() {
  $(this).attr('data-search-term', $(this).text().toLowerCase());
});
$('#search-criteria').on('keyup', function() {
  var searchTerm = $(this).val().toLowerCase();
  $('.post-content').each(function() {
    if ($(this).filter('[data-search-term *= ' + searchTerm + ']').length > 0) {
      $(this).show();
    } else {
      $(this).hide();
    }
  });
});

我尝试在 else block 中创建元素,但似乎每次按下键时都会触发,从而打印整个页面的事件。

最佳答案

这里有一个更简单的方法。

隐藏所有然后显示相关帖子。

$('.post-content').each(function() {
  $(this).attr('data-search-term', $(this).text().toLowerCase());
});

$('#search-criteria').on('keyup', function() {

  var searchTerm = $(this).val().toLowerCase();
  $('.post-content').hide();

  if (searchTerm) {
    var matches = $('.post-content').filter('[data-search-term *= ' + searchTerm + ']');
    $('.no-match').toggle(matches.length == 0)
    matches.show();
  }
});
.no-match {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="text" id="search-criteria" />

<div class=post-content>aaaaaaaa</div>
<div class=post-content>bbbbbbbb</div>
<div class=post-content>aaaaaaaa</div>
<div class=post-content>bbbbbbbb</div>
<div class=post-content>aaaaaaaa</div>
<div class=post-content>bbbbbbbb</div>
<div class="no-match">No Matches</div>

关于javascript - 在 keyup 事件中找不到结果时显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37410638/

相关文章:

javascript - addClass 不起作用

javascript - 最好的开源 JavaScript 树?

javascript - 当我点击 href 链接时,它会在关联此链接后选中所有复选框

javascript - 在 Swagger-UI 中为我的 API 创建隐藏或不可更改的参数?

javascript - 使用单选按钮更新 slider 和文本框的年\月计数

javascript - mouseenter 和 append 效果不佳

jquery - CSS 垂直 JQuery 菜单

javascript - 如何禁用某些选择下拉菜单的 select2 插件?

javascript - AngularJS:如何解决 "Attempting to use an unsafe value in a safe context"?

javascript - 只从 node.js 中的套接字读取前 N 个字节