arco.design 利用 a-input-search 和 a-trigger 自己实现一个关键字查询select

先看效果

在这里插入图片描述

<div class="search-content" id="map-search-wrapper">
 <a-trigger
    popup-visible
    position="bl"
    autoFitPopupWidth
    :popup-offset="4"
    :unmount-on-close="true"
    trigger="click"
    popup-container="#map-search-wrapper"
  >
    <a-input-search
      v-model="keyword"
      :style="{ width: '280px' }"
      placeholder="输入位置搜索"
      search-button
      allow-clear
      @input="onInputInput"
      @search="onInputSearch"
    >
      <template #button-icon>
        <icon-search size="12" />
      </template>
    </a-input-search>
    <template #content>
      <a-scrollbar style="height: 296px; overflow: auto" v-if="placeList?.length > 0">
        <div class="search-result">
          <div class="place-list">
            <div class="place-item" v-for="(place, index) in placeList" :key="index" @click="onPlaceItemClick(place)">
              <div class="place-item-content">
                <span class="place-name">
                  <PlaceColorName :name="place.name" :keyword="keyword" />
                </span>
                <span class="place-district">{{ place.district }}</span>
              </div>
            </div>
          </div>
        </div>
      </a-scrollbar>
    </template>
  </a-trigger>
</div>

难点:

问题:triggerContent 的 宽度需要和 trigger 的宽度保持一致
解决:autoFitPopupWidth属性,此属性在官方文档中并未书写,但看源码可以找到这个属性,其功能正好适合此场景

问题:如何实现在搜索大悦时,西单大悦城中大悦二字标黄
解决:利用正则实现,PlaceColorName.js 组件实现如下

import { h } from 'vue'

/**
 * 分割字符串并标注关键词
 * @param {string} targetStr - 目标字符串
 * @param {string} keyword - 关键字
 * @returns {string[]} 返回一个数组,其中目标字符串被分割,并用 "关键字" 标注
 */
function splitAndMarkKeyword(targetStr, keyword) {
  // 如果 keyword 中有正则表达式的关键字,则进行转义
  const escapeKeyword = keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
  const regex = new RegExp(`(${escapeKeyword})`, 'gi') // 创建一个全局忽略大小写的正则表达式来匹配关键字
  let match
  let result = []
  let lastIndex = 0

  while ((match = regex.exec(targetStr)) !== null) {
    // 添加关键字前的部分
    if (match.index > lastIndex) {
      result.push(targetStr.slice(lastIndex, match.index));
    }
    // 添加关键字
    result.push(`${match[0]}`)
    lastIndex = match.index + match[0].length
  }

  // 添加剩余部分
  if (lastIndex < targetStr.length) {
    result.push(targetStr.slice(lastIndex))
  }

  return result
}

export default function (value) {
  const name = value.name
  const keyword = value.keyword
  const nameStrs = splitAndMarkKeyword(name, keyword)
  return h(
    'span',
    {},
    nameStrs.map((item) => {
      if (item == keyword) {
        return h('span', { style: { color: '#FF874F' } }, item)
      } else {
        return item
      }
    })
  )
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/745966.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Netdiscover基本使用 - 发现局域网中存活主机

目录 0x00 介绍0x01 常用参数0x02 常用方式1. 主动模式2. 被动模式 0x00 介绍 原理&#xff1a;是一个二层&#xff08;数据链路层&#xff09;的ARP发现工具&#xff0c;执行命令的时候可以通过Wireshark查看是基于arp协议的。在不使用DHCP的无线网络上非常有用。 作用&#…

Go使用Gin框架开发的Web程序部署在Linux时,无法绑定监听Ipv4端口

最近有写一部分go语言开发的程序&#xff0c;在部署程序时发现&#xff0c;程序在启动后并没有绑定ipv4的端口&#xff0c;而是直接监听绑定ipv6的端口。 当我用netstat -antup | grep 3601查找我的gin服务启动的端口占用情况的时候发现&#xff0c;我的服务直接绑定了tcp6 &a…

Lua博客网站支持搜索、评论、登录注册

该简易博客示例用于学习网站的基础知识与MySQL数据库。 简述&#xff1a;开源Lua网站开发服务(FastWeb)支持&#xff1a;注册、登录、文章分页、评论分页、简易权限管理和搜索功能。发帖功能支持Markdown(支持记忆功能)图示&#xff1a;

GroundingDINO1.5突破开放式物体检测界限:介绍与应用

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

老板电器发布首个烹饪大模型“食神”,再次引领烹饪变革

爱因斯坦曾经说过&#xff1a;“我从不去想未来&#xff0c;因为它来得已经够快的了。”今天的人类社会&#xff0c;或许正处在一个连爱因斯坦都难以想象的巨变时代。一个没有任何高等数学或编程基础的普通人&#xff0c;只需一部手机或电脑&#xff0c;就可以享受苏格拉底的在…

【学习】开发板接口

工作用到机器的开发板 有如上三个接口 。最右是仿真器&#xff0c;中间是RS232串口&#xff0c;最左是电源线 仿真器 这个是仿真器 接入机器那端用的是SWD模式&#xff0c;另一端通过USB接电脑&#xff08;这小肥手拍的怪好看&#xff09;仿真口连接了四条线分别是 VCC&#…

基于 Spring Boot 的健康咨询系统

1 项目介绍 1.1 摘要 本项目旨在通过构建一个对用户更加友好的健康咨询平台&#xff0c;帮助用户方便、快捷地获取专业并且准确的健康咨询服务&#xff0c;同时为医疗机构提供一个高效易用的可以提供信息管理的服务平台。 项目采用了Spring Boot框架作为主要的开发平台。本系…

脚手架构建VUE项目

1.环境 安装node.js至少16以上&#xff0c;node中自动npm包管理工具 2.工具安装脚手架 在需要构建项目的目录下启动cmd,输入npm init vuelatest安装默认最新版本vue,根据提示完成安装。 3.安装依赖 安装提示安装依赖 4.项目构建成功&#xff0c;使用VScode工具打开

黑马程序员——Spring框架——day09——linux初级

目录&#xff1a; 前言 什么是Linux&#xff1f;为什么要学Linux 企业用人要求个人发展需要学完Linux能干什么 1).环境搭建2).常用命令3).安装软件4).项目部署小结2.Linux简介 主流操作系统Linux发展历史Linux系统版本Linux安装 安装方式介绍安装VMware安装Linux网卡设置安装S…

共创未来:订单共享模式驱动新零售增长新引擎

在当今快速变化的商业环境中&#xff0c;创新和效率成为了企业不可或缺的发展动力。为此&#xff0c;我们推出了一种颠覆性的商业模式——联合订单共享商业模式&#xff0c;它正在引领新零售行业的变革&#xff0c;并为企业家们提供了全新的发展机遇。 联合订单共享商业模式&am…

公司软件产品-资源详情列表中无法删除表(缺少删除按钮)

处理方式: 需要更新支撑后台库common_object表中STATE_FLAG 的字段状态 update common_object set STATE_FLAG 000000 where BASE_DIRECTORY 1460067;说明: 1460067 为目录ID 需要先将要删除的表结构迁移到一个新的目录中&#xff0c;迁移成功之后通过开发者工具f12查看dirI…

Spring底层原理之proxyBeanMenthod实例 动态代理 反射 Bean的拦截

proxyBeanMenthod 假设我们要进行一个系统的二次开发 然后第一次开发我们实用的是XML声明bean 二次开发的时候要用注解 我们如何把bean都加载上来呢 我们首先创建一个全新的配置类 package com.bigdata1421.config;public class SpringConfig32 { } 我们创建一个APP 加载…

Intentional设计分析,一款个人提效的AI产品

Intentional 是一款专注于提高工作效率的应用程序。 它允许用户设定上网目标&#xff0c;并会自动屏蔽与目标无关的网站&#xff0c;帮助用户保持专注&#xff0c;避免在网上无谓地浏览和分心。 这款应用程序是由开发者 Samy RAHIM 创造的&#xff0c;为了解决当今上网时容易…

AIPainter:创意绘画的智能助手

AIPainter 介绍 AIPainter是一款简单易用的AI画图工具&#xff0c;支持文生图、图生图&#xff08;提示词改图、图片变体、分辨率增强等&#xff09;&#xff0c;底层大模型基于开源的腾讯混元文生图、SDXL等。 功能特点 提示词库 AIPainter默认提供了一些常用场景的提示词供…

PLC梯形图(置位与复位)的使用方法

置位指令相当于我们把照明灯的开关按到开的状态,即便我们把手离开,开关也是通的,灯也是亮的。 想要关闭必须要把它按到关的状态,即使用复位指令。 复位指令相当于我们把照明灯的开关按到关的状态,把手离开,开关也是断的,灯也是不亮的。 想要打开必须要把它按到开的状…

【JPCS独立出版】2024计算建模与应用数学国际学术会议暨中俄微分方程及其应用学术会议(CMAM 2024 DEA,8月2-4)

2024计算建模与应用数学国际学术会议暨中俄微分方程及其应用学术会议&#xff08;CMAM 2024 & DEA&#xff09;由大连海事大学理学院主办&#xff0c;上海海关学院、俄罗斯科学院科学城数学中心、辽宁省数学学会、大连市数学学会协办&#xff0c;AEIC学术交流中心承办。会议…

还不到6个月,GPTs黄了

相比起来&#xff0c;人们还不如使用一个足够强大、灵活且通用的AI助手来满足各类复杂需求。更严重的是一些独立GPTs显露出的安全隐患。除此之外&#xff0c;最大的问题在于OpenAI模糊不清的货币化政策。 文章正文 上周&#xff0c;不少人发现微软官网忽然更新了一条“GPT Bu…

AD手动添加网络

AD手动添加网络&#xff0c;&#xff08;用于不画原理图直接画PCB用&#xff09;一看就懂_ad不用原理图画pcb-CSDN博客https://blog.csdn.net/feifeiccode/article/details/107198441#:~:text%E6%B7%BB%E5%8A%A0%E8%A6%81%E6%B7%BB%E5%8A%A0%E7%9A%84%E7%BD%91%E7%BB%9C,%E6%8C…

Android简介-历史、API等级与体系结构

1. Android简介 Android是一种基于Linux内核的自由及开放源代码的操作系统。最初是由安迪鲁宾(Andy Rubin)开发的一款相机操作系统。2005年8月被Google收购。2007年11月&#xff0c;Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。…

GISSERVER 管理器 1.0(私有化地图离线部署)

一、 简介 QGIS现在在全世界已经成为ARCGIS的最佳代替产品,而且是开源免费的。其用户社区和产品功能都已经可以与arcgis相媲美! GISSERVER管理工具是一个零代码地图网站建站工具(私有化地图离线部署)&#xff0c;可以直接将QGIS工程转换为GIS网站&#xff08;功能类似ARCGISM…