【搜索框的匹配功能】

news2024/11/26 18:33:07

功能需求:

1. 输入关键字的同时,以下拉列表的形式显示匹配的内容;

2. 点击下拉列表的选项,跳转到对应的新的页面

注意:这里读取data.txt(检索的文件对象),会存在跨域的问题,所以这里启动一个服务器将静态文件挂载到服务器上。

服务器端:通过Node.js的express框架,这里跨域还需要导入cors库。

static.js


const express = require('express')
const app = express()
const cors = require('cors')

app.use(cors())
app.use(express.static('.'))  //当前目录挂载到服务器

app.listen(3000, () => {
    console.log('server is running at http://127.0.0.1:3000')
})

命令行启动服务器:

node static.js 

前端静态文件:

搜索页面.html(这里采用的layui框架,所以需要引入layui核心css和js文件)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>搜索页面</title>
    <!-- css引入 -->
    <link rel="stylesheet" href="css/layui.css">
    <style>
        .form-box{
            width: 600px;
            margin:100px auto 0;
        }
        ul li{
				line-height: 50px;
				width: 382px;
				letter-spacing: 1px;
				text-indent: 8px;
				font-size: 12px;
                font-family:Arial,Helvetica,sans-serif;
				background-color: #ffffff;
                border-style:solid;
                border-width: thin;
	            border-top:none;
                border-color: #eeeeee;
		}
        ul li a{
            display: block;
        }
		ul li:hover{
			background-color: #e9faff;
			color: #666;
        }
        
    </style>
</head>
<body>
    <div class="form-box">
        <form action="" class="layui-form">
            <div style="width: 500px; float: left;">
                <label class="layui-form-label" for="">搜索匹配:</label>
                <div class="layui-input-block">
                        <input type="text" class="layui-input" id="search-input" onkeyup="search()" placeholder="请输入">
                        <!-- 搜索结果 -->
                        <div id="search-result" style="margin-top:15px">
                    </div>
                </div>
            </div>
        </form>
    </div>
    
	<!-- 引入js -->
	<script src="js/jquery-1.11.3.min.js"></script>
    <script src="js/layui.js"></script>
    <script src="search.js"></script>
</body>
</html>

search.js

// 定义一个全局变量,用于存储解析出来的数据
var searchData = [];

// 解析数据
function parseData(dataText) {
    //每1行为分隔符号,存放在数组dataArray中
    var dataArray = dataText.split("\n");
    for (var i = 0; i < dataArray.length; i++) {
        // 解析dataArray元素中的每个字符串
        var item = dataArray[i].split(",");
        // 新的数组searchData存放的是对象(name + url)
        searchData.push({
            name: item[0],
            url: item[1]
        });
    }
}

// 搜索功能
function search() {
    var searchInput = document.getElementById("search-input");
    var searchResult = document.getElementById("search-result");
    searchResult.innerHTML = "";
    
    //搜索框输入的内容
    var keyword = searchInput.value.trim().toLowerCase();
    if (keyword === "") {
        return;
    }

    //搜索匹配
    //filter(function(item) { return 筛选的条件  })
    var matchedData = searchData.filter(function(item) {
        //返回 item对象中 name字符串中含keyword子字符串第一次出现的位置(-1表示没有)
        return item.name.toLowerCase().indexOf(keyword) !== -1;
    });

    //构造前端html中<div id="search-result" style="margin-top:15px">的内容
    var resultList = document.createElement("ul");
    matchedData.forEach(function(item) {
        var resultItem = document.createElement("li");
        var resultLink = document.createElement("a");
        //每个item都是一个对象(name + url)
        resultLink.href = item.url;
        resultLink.innerHTML = item.name;
        resultItem.appendChild(resultLink);
        resultList.appendChild(resultItem);
    });
    searchResult.appendChild(resultList);
}

// 加载数据并解析
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
        parseData(xhr.responseText);
    }
};
xhr.open("GET", "data.txt");
xhr.send();

运行如下:

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习可视化系列】—— 特征图可视化(支持Vit系列模型的特征图可视化,包含使用Tensorboard对可视化结果进行保存)

【深度学习可视化系列】—— 特征图可视化&#xff08;支持Vit系列模型的特征图可视化&#xff0c;包含使用Tensorboard对可视化结果进行保存&#xff09; import sys import os import torch import cv2 import timm import numpy as np import torch.nn as nn import album…

Ubuntu 20.04 安装 Stable Diffusionn

步骤 1&#xff1a;安装 wget、git、Python3 和 Python3虚拟环境&#xff08;如果已安装可忽略这步骤&#xff09; sudo apt install wget git python3 python3-venv步骤 2&#xff1a;克隆 SD 项目到本地 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webu…

亚信科技AntDB数据库与库瀚存储方案完成兼容性互认证,联合方案带来约20%性能提升

近日&#xff0c;亚信科技AntDB数据库与苏州库瀚信息科技有限公司自主研发的RISC-V数据库存储解决方案进行了产品兼容测试。经过双方团队的严格测试&#xff0c;亚信科技AntDB数据库与库瀚数据库存储解决方案完全兼容、运行稳定。除高可用性测试外&#xff0c;双方进一步开展TP…

nacos升级开启鉴权后,微服务无法连接的解决方案

版本&#xff1a; 软件版本号备注spring boot2.2.5.RELEASEspring-cloudHoxton.SR3spring-cloud-alibaba2.2.1.RELEASEnacos2.0.1从1.4.2版本进行升级。同时作为注册中心和配置中心 一、升级nacos版本&#xff0c;开启鉴权 1.在application.properties配置文件开启鉴权&…

【资料分享】全志科技T507-H开发板规格书

1 评估板简介 创龙科技TLT507-EVM是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53国产工业评估板,主频高达1.416GHz,由核心板和评估底板组成。核心板CPU、ROM、RAM、电源、晶振等所有器件均采用国产工业级方案,国产化率100%。同时,评估底板大部分元器件亦采用国产…

sentinel---滑动窗口的实现原理

sentinel有多种规则&#xff0c;包括&#xff1a;降级、限流、热点等等规则&#xff0c;这些规则均会涉及到时间因素&#xff0c;既在单位时间内的请求量满足各种条件之后的各种动作。 这里我们一起来探针一下sentinel中滑动窗口的实现 如上是一个滑动窗口的示意图。 这里先不…

电脑IP地址错误无法上网怎么办?

电脑出现IP地址错误后就将无法连接网络&#xff0c;从而无法正常访问互联网。那么当电脑出现IP地址错误时该怎么办呢&#xff1f; 确认是否禁用本地连接 你需要先确定是否禁用了本地网络连接&#xff0c;如果发现禁用&#xff0c;则将其启用即可。 启用方法&#xff1a;点击桌…

设计实现数据库表扩展的7种方式

设计实现数据库表扩展的7种方式 在软件开发过程中&#xff0c;数据库是一项关键技术&#xff0c;用于存储、管理和检索数据。数据库表设计是构建健壮数据库系统的核心环节之一。然而&#xff0c;随着业务需求的不断演变和扩展&#xff0c;数据库表中的字段扩展变得至关重要。 …

【TensorFlow】P0 Windows GPU 安装 TensorFlow、CUDA Toolkit、cuDNN

Windows 安装 TensorFlow、CUDA Toolkit、cuDNN 整体流程概述TensorFlow 与 CUDA ToolkitTensorFlow 是一个基于数据流图的深度学习框架CUDA 充分利用 NIVIDIA GPU 的计算能力CUDA Toolkit cuDNN 安装详细流程整理流程一&#xff1a;安装 CUDA Toolkit步骤一&#xff1a;获取CU…

GIS和倾斜摄影的关系?

GIS&#xff08;地理信息系统&#xff09;和倾斜摄影是两种在地理空间数据处理和分析中扮演重要角色的技术。但是我们总是会分不清二者&#xff0c;本文就带大家从不同角度了解二者之间的关系。 概念 GIS是一种用来捕获、存储、分析和展示地理空间数据的技术&#xff0c;它可以…

Java课题笔记~ Spring 集成 MyBatis

Spring 集成 MyBatis 将 MyBatis 与 Spring 进行整合&#xff0c;主要解决的问题就是将 SqlSessionFactory 对象交由 Spring 来管理。所以该整合&#xff0c;只需要将 SqlSessionFactory 的对象生成器SqlSessionFactoryBean 注册在 Spring 容器中&#xff0c;再将其注入给 Dao…

Apollo让自动驾驶如此简单

前言&#xff1a; 最近被新能源的电价闹的不行&#xff0c;买了电车的直呼上当了、不香了。但电车吸引人不只是公里油耗低&#xff0c;还有良好的驾车使用感。比如辅助驾驶、甚至是自动驾驶。今天来介绍一个头部自动驾驶平台Apollo&#xff0c;Apollo是一个开源的、自动驾驶的软…

【Hystrix技术指南】(4)故障切换的运作流程

[每日一句] 也许你度过了很糟糕的一天&#xff0c;但这并不代表你会因此度过糟糕的一生。 [背景介绍] 分布式系统的规模和复杂度不断增加&#xff0c;随着而来的是对分布式系统可用性的要求越来越高。在各种高可用设计模式中&#xff0c;【熔断、隔离、降级、限流】是经常被使…

iperf3-性能测试

iperf3-性能测试 安装1.apt安装2.源码安装 使用方法iperf原理测试参考文档性能测试客户端服务端 官方文档&#xff1a;https://iperf.fr/iperf-doc.php 安装 1.apt安装 sudo apt-get install iperf32.源码安装 # 按照官方说明安装 ./configure make sudo make install执行编…

OceanBase 4.1.0 clog 目录探究

基于OceanBase 4.x 版本如何统计租户每日 clog 日志生成量的背景下&#xff0c;探究以及如何查看租户 clog 的使用情况。 作者&#xff1a;姜宇 爱可生 DBA 团队成员&#xff0c;擅长数据库故障排查和处理。对技术抱有热忱&#xff0c;实践是检验真理的唯一标准~ 本文来源&…

对docker的简单理解

一款产品从开发到上线&#xff0c;从操作系统&#xff0c;到运行环境&#xff0c;再到应用配置。作为开发运维之间的协作&#xff0c;我们需要关心很多东西&#xff0c;这也是很多互联网公司都不得不面对的问题&#xff0c;特别是各种版本的迭代之后&#xff0c;不同版本环境的…

MySQL安装和卸载

1.MySQL概述 MySQL概述 MySQL是一个[关系型数据库管理系统]&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;2008年被sun公司收购&#xff0c; 2009sun又被oracle收购&#xff0c;所以属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用…

springboot(4)

AOP 1.AOP与OOP OOP&#xff08;Object Oriented Programming&#xff0c;面向对象编程&#xff09; AOP&#xff08;Aspect Oriented Programming&#xff0c;面向切面编程&#xff09; POP&#xff08;Process Oriented Programming&#xff0c;面向过程编程&#xff09; …

扩展卡尔曼滤波器代码

文章目录 前言问题状态向量和观测向量加性噪声的形式状态方程及求导观测方程及求导状态初始化过程噪声和观测噪声卡尔曼滤波过程code 前言 卡尔曼滤波器在1960年被卡尔曼发明之后&#xff0c;被广泛应用在动态系统预测。在自动驾驶、机器人、AR领域等应用广泛。卡尔曼滤波器使…

在R中比较两个矩阵是否相等

目录 方法一&#xff1a;使用all.equal()比较两个R对象是否近似相等 方法二&#xff1a;使用identical比较两个R对象是否精确相等。 方法一&#xff1a;使用all.equal()比较两个R对象是否近似相等 使用函数&#xff1a;all.equal(x,y) 比较两个R对象x和y是否近似相等 > M1…