【搜索框的匹配功能】

功能需求:

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();

运行如下:

 

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

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

相关文章

网络编程——深入理解TCP/IP协议——OSI模型和TCP/IP模型:构建网络通信的基石

TCP/IP协议— 一、简介 TCP/IP协议&#xff0c;即传输控制协议/互联网协议&#xff0c;是一组用于在计算机网络中实现通信的协议。它由两个主要的协议组成&#xff1a;TCP&#xff08;传输控制协议&#xff09;和IP&#xff08;互联网协议&#xff09;。TCP负责确保数据的可靠…

本地化部署自建类ChatGPT服务远程访问

本地化部署自建类ChatGPT服务远程访问 文章目录 本地化部署自建类ChatGPT服务远程访问前言系统环境1. 安装Text generation web UI2.安装依赖3. 安装语言模型4. 启动5. 安装cpolar 内网穿透6. 创建公网地址7. 公网访问8. 固定公网地址 &#x1f340;小结&#x1f340; 前言 Te…

VBA技术资料MF41:VBA_将常规数字转换为文本数字

【分享成果&#xff0c;随喜正能量】时有落花至&#xff0c;远随流水香。人生漫长&#xff0c;不攀缘&#xff0c;不强求&#xff0c;按照自己喜欢的方式生活&#xff0c;不必太过在意&#xff0c;顺其自然就好。路再长也有终点&#xff0c;夜再黑也有尽头。 我给VBA的定义&am…

7 个最佳Node.js日志记录库和聚合器

日志记录是软件测试的重要组成部分。当我们知道错误是什么以及代码中出现问题的确切行时&#xff0c;调试应用程序要容易得多。 在本文中&#xff0c;我们将探讨与 Node.js 中的日志记录相关的各种概念&#xff0c;包括七个流行的日志记录库和聚合器&#xff0c;您可以使用它们…

成品短视频App源码,开启你的创意视频之旅!

短视频App如今已成为人们记录和分享生活的热门方式。你是否想过自己拥有一款属于自己的短视频App呢?有了短视频App源码&#xff0c;就能轻松实现这一愿望。本文将介绍短视频App源码的优势、开发流程和功能特点&#xff0c;助你快速创建个性化短视频App&#xff0c;开启你的创意…

04-1_Qt 5.9 C++开发指南_常用界面设计组件_字符串QString

本章主要介绍Qt中的常用界面设计组件&#xff0c;因为更多的是涉及如何使用&#xff0c;因此会强调使用&#xff0c;也就是更多针对实例&#xff0c;而对于一些细节问题&#xff0c;需要参考《Qt5.9 c开发指南》进行学习。 文章目录 1. 字符串与普通转换、进制转换1.1 可视化U…

万字长文解析深度学习中的术语

引言 新手在学习深度学习或者在看深度学习论文的过程中&#xff0c;有不少专业词汇&#xff0c;软件翻译不出来&#xff0c;就算是翻译出来也看不懂&#xff0c;因为不少术语是借用其他学科的概念&#xff0c;这里整理了一些在深度学习中常见的术语&#xff0c;并对一些概念进…

SpringSecurity5.7+最新案例 -- 授权 --

一、前提 书接上回 SpringSecurity5.7最新案例 – 用户名密码验证码记住我 本文 继续处理SpringSecurity授权 … 目前由 难 -> 简&#xff0c;即自定义数据库授权&#xff0c;注解授权&#xff0c;config配置授权 二、自定义授权 0. 数据准备 SET NAMES utf8mb4; SET …

CentOS软件包管理rpm、yum

一、软件包概述 Linux常见软件包分为两种&#xff0c;分别是源代码包、二进制文件包。源代码包是没有经过编译的包&#xff0c;需要经过GCC、C编译器编译才能运行&#xff0c;文件内容包含源代码文件&#xff0c;通常以.tar.gz、.zip、.rar结尾&#xff1b;二进制包无需编译&am…

APP外包开发的开发语言对比

在开发iOS APP时有两种语言可以选择&#xff0c;Swift&#xff08;Swift Programming Language&#xff09;和 Objective-C&#xff08;Objective-C Programming Language&#xff09;&#xff0c;它们是两种不同的编程语言&#xff0c;都被用于iOS和macOS等苹果平台的软件开发…

pytorch学习——卷积神经网络——以LeNet为例

目录 一.什么是卷积&#xff1f; 二.卷积神经网络的组成 三.卷积网络基本元素介绍 3.1卷积 3.2填充和步幅 3.2.1填充&#xff08;Padding&#xff09; 填充是指在输入数据周围添加额外的边界值&#xff08;通常是零&#xff09;&#xff0c;以扩展输入的尺寸。填充可以在卷…

Dockerfile构建Tomcat镜像

准备apache包和jdk并解压 [rootlocalhost tomcat]# ll 总用量 196728 -rw-r--r--. 1 root root 9690027 7月 17 2020 apache-tomcat-8.5.40.tar.gz -rw-r--r--. 1 root root 674 8月 2 20:19 Dockerfile -rw-r--r--. 1 root root 191753373 7月 17 2020 jdk-8u191-…

【Python基础教程】super()函数的正确使用方法

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 1.super(本身类名,self).方法名(参数)这样就可以调用父类的方法和参数了,super()内也可不加参数 2.规律是super是按调用的次序执行&#xff0c;super后面的语句是逆向执行的。 有2段示例代码&#xff0c;不同的在于value有没…

基于短信宝API零代码实现短信自动化业务

场景描述&#xff1a; 基于短信宝开放的API能力&#xff0c;实现在特定事件&#xff08;如天气预警&#xff09;或定时自动发送短信&#xff08;本文以定时群发短信为例&#xff09;。通过Aboter平台如何实现呢&#xff1f; 使用方法&#xff1a; 首先创建一个IPaaS流程&…

解决Vue3 使用Element-Plus导航刷新active高亮消失

解决Vue3 使用Element-Plus导航刷新后active高亮消失的问题 启用路由模式会在激活导航时以 index 作为 path 进行路由跳转 使用 default-active 来设置加载时的激活项。 接下来打印一下选中项index和index路径&#xff0c; 刷新也是没有任何问题的&#xff0c;active不会消失…

python+django+mysql项目实践二(前端及数据库)

python项目实践 环境说明&#xff1a; Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 前端模板 添加模板 在templates下创建 views文件中添加 创建数据库 连接数据库 在setting文件中进行配置 创建表

SDXL-Stable Diffusion改进版

文章目录 1. 摘要2. 算法&#xff1a;2.1 结构&#xff1a;2.2 微小的条件机制2.3 多宽高比训练2.4 改进自编码器2.5 所有组合放到一起2.6 主流方案比较 3. 未来工作4. 限制 论文&#xff1a; 《SDXL: Improving Latent Diffusion Models for High-Resolution Image Synthesis…

APP外包开发的android开发模式

开发 Android 应用有多种方法&#xff0c;每种方法都有其优势和适用场景。综合考虑各自的特点&#xff0c;你可以根据项目的需求和团队的技能选择最合适的开发方法。今天和大家分享几种常见的开发方法以及它们之间的对比&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公…

NeRF-SLAM: Real-Time Dense Monocular SLAM with Neural Radiance Fields 论文阅读

论文信息 题目&#xff1a;NeRF-SLAM: Real-Time Dense Monocular SLAM with Neural Radiance Fields 作者&#xff1a;Antoni Rosinol, John J. Leonard&#xff0c; Luca Carlone 代码&#xff1a;https://github.com/ToniRV/NeRF-SLAM 来源&#xff1a;arxiv 时间&#xff…

安装element-plus报错:Conflicting peer dependency: eslint-plugin-vue@7.20.0

VSCode安装element-plus报错&#xff1a; D:\My Programs\app_demo>npm i element-plus npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: vue/eslint-config-standard6.1.0 npm ERR! Found: eslint-plugin-vue8.7.1 npm E…