javascript - 如何使用 JavaScript 在我的图片库中实现多个标签搜索?

标签 javascript jquery

我有一个带有搜索输入的图片库,用户可以在其中输入图像标题或图像标签并搜索匹配项。我现在需要能够对标签进行多次搜索。例如,如果我输入: #tree -> 结果将是标签中包含“tree”(特别是)的所有图像,而不是部分包含该单词的图像,因为标签搜索应该是特定的。我需要能够输入:#tree,#sky -> 并输出所有包含“树”和“天空”的图像。到目前为止,我的代码仅执行第一个示例。

HTML:

<div class="searchBtn">
    <input type="text" id="inputValue" placeholder="Search by name or #tag">
    <button onclick="Search()" type="button">Search</button>
</div>

JS:

let filterSearch = $("#inputValue").val().toLowerCase();

function findAllImages(filter, start, itemsCount) {  
    let photos = [];
    let tagSign = "#";
    const searchByTag = filterSearch [0] === tagSign;
    let searchCondition = searchByTag ? filterSearch.slice(1) : filter;

       let newFiltered = imageArrayPhotos.filter(
    searchByTag ? image =>  image.tag.indexOf(searchCondition) >= 0 :
        image => image.title.toLowerCase().indexOf(searchCondition) >= 0);

for (let i = start; i < newFiltered.length; i++) {
    photos .push(newFiltered [i]);

    if (photos.length >= numberOfImages) {
        break;
    }
}
return photos ;
}

我可以使用 let newFiltered = imageArrayPhotos.filter(function() {}) 上的回调函数来完成所有可能性吗?

最佳答案

为什么不使用正则表达式。检查这是否可行。

let searchByTag = true;
let imageArrayPhotos = [{
    tag: 'tree',
    title: 'tree'
  },
  {
    tag: 'forest',
    title: 'tree'
  },
  {
    tag: 'sky',
    title: 'sky'
  },
  {
    tag: 'bird',
    title: 'bird'
  },
  {
    tag: 'watertree',
    title: 'sky'
  },
];

let filterSearch = '';
let searchCondition = '';
let pattern;
let newFiltered = [];

function Search() {
  newFiltered = [];
  filterSearch = '';
  searchCondition = '';
  filterSearch = $("#inputValue").val();
  filterSearch = filterSearch.split(',');
  //searchCondition = searchByTag ? filterSearch.slice(1) : filter;
  //newFiltered = imageArrayPhotos.filter(checkFilter);
  filterSearch.forEach(function(item) {
    item = $.trim(item);
    searchByTag = item[0] == "#";
    pattern = new RegExp("^" + $.trim(item).replace(/#/g, '') + "$");

    let itemData = imageArrayPhotos.filter(checkFilter);
    if (itemData.length > 0) {
      newFiltered = newFiltered.concat(itemData);
    }

  });
  console.log(newFiltered);
}

function checkFilter(image) {
  return searchByTag ? pattern.test(image.tag) :
    pattern.test(image.title)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="searchBtn">
  <input type="text" id="inputValue" placeholder="Search by name or #tag">
  <button onclick="Search()" type="button">Search</button>
</div>

关于javascript - 如何使用 JavaScript 在我的图片库中实现多个标签搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58817649/

相关文章:

javascript - 禁止点击复选框;让父 div 处理

javascript - 当跟随侧边栏到达页脚时如何停止?

javascript - jQuery Vmap 刷新与函数加载

javascript - 悬停时将颜色层放在背景图像上的 Css 动画

javascript - 在父链接悬停时显示子菜单,然后保持它可见直到鼠标离开子菜单?

javascript - 如何根据用户在文本框中输入的内容更改下拉列表中的选定项目?

javascript - 跨 Node 项目共享通用 typescript 代码

javascript - 检测 div 在数组中的位置

jquery - 使用 jquery 将解析后的文本转换为整数

javascript - Twitter Bootstrap Modal - 未出现