使用AlpineJS根据菜单列表搜索/筛选

gstyhher  于 2022-10-22  发布在  Java
关注(0)|答案(1)|浏览(243)

我对阿尔卑斯山相当陌生。js,并希望为项目列表创建一个简单的搜索/过滤输入。
我见过一些examples使用<template>,但我对这种特殊的技术不感兴趣。
页面上已经存在项目列表,因此基于“标记”数组隐藏和取消隐藏项目是一个简单的目标。
1.我需要获取列表中的所有项目(以及子菜单)。(因此,在<li><ul>上使用x-ref
1.根据搜索输入筛选数组。(卡住了)
1.隐藏剩余列表!==搜索输入。(卡住了)
我有一个关于codepen的简单示例
我不确定将列表项绑定到x-data的最佳方法,然后我假设使用.filter( $ref.startsWith(.this.search))来过滤这些项。
🤷🏻‍♂️
任何帮助都会被感激的!

hc2pp10m

hc2pp10m1#

代替x-ref,您需要使用引用当前DOM元素的$el魔法属性:只需将其传递给show_item($el)方法,如果元素的mn4o1p属性包含搜索字符串,该方法将返回true

<script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script>
<div class="wrapper" x-data="{
  search: '',
  show_item(el) {
    return this.search === '' || el.textContent.includes(this.search)
  }
}">

  <input class="search-input" type="search" placeholder="Filter: A B C D" x-model="search">

  <div>
    <p>Search Input: <span x-text="search"></span></p>
  </div>

  <p><b>Menu:</b></p>
  <ul class="menu">
    <li x-show="show_item($el)">Item A</li>
    <li x-show="show_item($el)">Item B</li>
    <li x-show="show_item($el)">
      Dropdown C
      <ul>
        <li x-show="show_item($el)">Item C:A</li>
        <li x-show="show_item($el)">Item C:B</li>
      </ul>
    </li>
    <li x-show="show_item($el)">Item D</li>
    <li x-show="show_item($el)">Item E</li>
    <li x-show="show_item($el)">Item F</li>
    <li x-show="show_item($el)">
      Dropdown G
      <ul>
        <li x-show="show_item($el)">Item G:A</li>
        <li x-show="show_item($el)">Item G:B</li>
      </ul>
    </li>
  </ul>
</div>

相关问题