将代码修改为通过多个属性进行筛选

前端开发 2026-07-09

我按照下面的片段使用jQuery设置了一个过滤器。

我想能够按多个属性过滤——目前我只能按 title 属性进行过滤。

我应该如何修改代码,使我能够过滤这三个属性——例如 titledata-emojiversion 属性?

$('[data-search]').on('keyup', function(e) {
  var searchVal = $(this).val();
  var filterItems = $('[title]');
  console.log(filterItems);
  if (searchVal != '') {
    filterItems.addClass('hidden');
    $('[title*="' + searchVal.toLowerCase() + '"]').removeClass('hidden');
  } else {
    filterItems.removeClass('hidden');
  }
});
.hidden {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

<input type="search" data-search="" placeholder="filter">

<hr>

<div>
  <span data-emoji="😀" title="grinning face" version="1.0">😀</span>
  <span data-emoji="😃" title="grinning face with big eyes" version="0.6">😃</span>
  <span data-emoji="🥰" title="smiling face with hearts" version="11.0">🥰</span>
  <span data-emoji="😍" title="smiling face with heart-eyes" version="0.6">😍</span>
  <span data-emoji="👋" title="waving hand" version="0.6">👋</span>
  <span data-emoji="🤚" title="raised back of hand" version="3.0" >🤚</span>
  <span data-emoji="👌" title="OK hand" version="0.6">👌</span>
  <span data-emoji="🤌" title="pinched fingers" version="13.0" >🤌</span>
</div>

解决方案

你需要在属性上进行过滤。如果你新增了属性,请更新列表。

const attrs = ['title', 'data-emoji', 'version']; // change as needed

$('[data-search]').on('input', function() { // I prefer input to keyUp
  const searchVal = this.value.toLowerCase(); // change if you NEED case sensitive
  const $filterItems = $('span[title][data-emoji][version]'); // find items that have the attributes
  if (!searchVal) {
    $filterItems.removeClass('hidden');
    return;
  }
  $filterItems
    .addClass('hidden')
    .filter(function() {
      // .some will return hits in any of the attributes
      return attrs.some(attr => 
        ($(this).attr(attr) || '').toLowerCase().includes(searchVal)
      );
    })
    .removeClass('hidden');
});
.hidden {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>

<input type="search" data-search="" placeholder="filter">

<hr>

<div>
  <span data-emoji="😀" title="grinning face" version="1.0">😀</span>
  <span data-emoji="😃" title="grinning face with big eyes" version="0.6">😃</span>
  <span data-emoji="🥰" title="smiling face with hearts" version="11.0">🥰</span>
  <span data-emoji="😍" title="smiling face with heart-eyes" version="0.6">😍</span>
  <span data-emoji="👋" title="waving hand" version="0.6">👋</span>
  <span data-emoji="🤚" title="raised back of hand" version="3.0" >🤚</span>
  <span data-emoji="👌" title="OK hand" version="0.6">👌</span>
  <span data-emoji="🤌" title="pinched fingers" version="13.0" >🤌</span>
</div>
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章