JS+H5美观的带搜索的博客文章列表(可搜索多个参数)

news2024/9/23 1:24:38

实现

  1. 美观的界面(电脑、手机端界面正常使用)
  2. 多参数搜索(文章标题,文章简介,文章发布时间等)
  3. 文章链接跳转

效果图

手机端

在这里插入图片描述

电脑端

在这里插入图片描述

搜索实现

搜索功能实现解释

  1. 定义文章数据:

    • 文章数据保存在一个 JavaScript 数组 articles 中。每篇文章包含以下信息:文章 ID、标题、描述、链接地址、阅读数量、点赞数、收藏数、评论数和发布时间。
  2. 搜索框和按钮:

    • 页面上有一个搜索框(<input> 元素)和一个搜索按钮(<button> 元素)。
    • 搜索按钮的 onclick 属性绑定了一个函数 searchArticles(),这个函数会在点击按钮时被调用。
  3. 搜索功能实现:

    • searchArticles() 函数首先获取用户在搜索框中输入的搜索查询(query),并将其转换为小写以便进行不区分大小写的搜索。
    • 然后,函数通过 Array.prototype.filter() 方法在 articles 数组中筛选出符合查询条件的文章。筛选条件是:文章的标题或描述中包含查询字符串。
    • 如果没有找到符合条件的文章,显示一个提示框 (alert('没有搜索到'))。
    • 如果找到了符合条件的文章,调用 displayArticles() 函数来更新页面显示内容。
  4. 更新显示内容:

    • displayArticles() 函数接收一个文章数组(articleList)作为参数。这个数组包含了需要显示的文章数据。
    • 函数首先清空页面中现有的文章内容(通过将 articles-container 元素的 innerHTML 设置为空)。
    • 然后,为每篇文章创建一个新的 <div> 元素,并根据文章数据设置其内容,包括标题、描述、阅读数量、点赞数、收藏数、评论数和发布时间。
    • 将新创建的文章元素添加到页面中,以显示筛选后的结果。
  5. 初始加载:

    • 当页面加载时,调用 displayArticles(articles) 来显示所有文章。这样用户在页面加载时可以看到所有可用的文章。

源代码

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>海鸥的博客文章</title>
    <style>
        body {
            background-color: #f0f0f0;
            font-family: "Microsoft YaHei", sans-serif;
            margin: 0;
            padding: 0;
        }
        .header {
            background-color: #333;
            color: white;
            text-align: center;
            padding: 20px 0;
            font-weight: bold;
            font-size: 24px;
        }
        .search-container {
            display: flex;
            justify-content: center;
            margin: 20px 0;
        }
        .search-box {
            border: 1px solid #ddd;
            border-radius: 20px;
            padding: 10px;
            width: 300px;
            margin-right: 10px;
        }
        .search-button {
            background-color: #007bff;
            border: none;
            border-radius: 20px;
            color: white;
            padding: 10px 20px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
            cursor: pointer;
        }
        .article {
            background-color: white;
            border-radius: 10px;
            box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
            margin: 20px auto;
            padding: 20px;
            width: 80%;
            transition: border 0.3s;
            cursor: pointer;
        }
        .article:hover {
            border: 2px solid #007bff;
        }
        .article-title {
            font-weight: bold;
            text-decoration: none;
            color: black;
        }
        .article-title img {
            height: 20px;
            margin-left: 10px;
            vertical-align: middle;
        }
        .article-description {
            color: #555;
        }
        .article-meta {
            color: #888;
            font-size: 14px;
            margin-top: 10px;
        }
        .divider {
            border-top: 1px solid #ddd;
            margin: 10px 0;
        }
    </style>
</head>
<body>
    <div class="header">
        海鸥的博客文章
    </div>
    <div class="search-container">
        <input type="text" id="searchInput" class="search-box" placeholder="搜索文章...">
        <button class="search-button" onclick="searchArticles()">搜索</button>
    </div>
    <div id="articles-container">
        <!-- Articles will be dynamically inserted here -->
    </div>
    <script>
        const articles = [
            { id: 1, title: "如何用Js存储cookies", description: "这篇文章讲述了如何使用JavaScript语言储存cookies信息", url: "1.html", reads: 113, likes: 50, favorites: 8, comments: 6, date: "2024年8月1日" },
            { id: 2, title: "第二篇文章标题", description: "这篇文章的描述内容", url: "2.html", reads: 123, likes: 60, favorites: 10, comments: 7, date: "2024年8月2日" },
            { id: 3, title: "第三篇文章标题", description: "这篇文章的描述内容", url: "3.html", reads: 130, likes: 70, favorites: 12, comments: 8, date: "2024年8月3日" }
        ];

        function displayArticles(articleList) {
            const container = document.getElementById('articles-container');
            container.innerHTML = '';
            
            articleList.forEach(article => {
                const articleDiv = document.createElement('div');
                articleDiv.className = 'article';
                articleDiv.id = article.id;
                articleDiv.onclick = () => window.location.href = article.url;
                articleDiv.innerHTML = `
                    <a href="${article.url}" class="article-title">${article.title} <img src="https://via.placeholder.com/20" alt="图标"></a>
                    <p class="article-description"><a href="${article.url}" style="color: inherit; text-decoration: none;">${article.description}</a></p>
                    <div class="divider"></div>
                    <p class="article-meta">${article.reads}人阅读 ${article.likes}人点赞 ${article.favorites}人收藏 ${article.comments}条评论</p>
                    <p class="article-meta">发布于${article.date}</p>
                `;
                container.appendChild(articleDiv);
            });
        }

        function searchArticles() {
            const query = document.getElementById('searchInput').value.toLowerCase();
            const results = articles.filter(article =>
                article.title.toLowerCase().includes(query) ||
                article.description.toLowerCase().includes(query)
            );

            if (results.length === 0) {
                alert('没有搜索到');
            } else {
                displayArticles(results);
            }
        }

        // Display all articles initially
        displayArticles(articles);
    </script>
</body>
</html>

送大家一段话:
笔走龙蛇,意境深远。言之有物,情真意切。
辞藻华丽,意蕴深厚。文思敏捷,才华横溢。
洞若观火,鞭辟入里。文采飞扬,笔力雄健。
行云流水,流畅自然。精辟入里,洞察秋毫。
妙语连珠,引人入胜。深入骨髓,发人深省。
豁然开朗,醍醐灌顶。言之凿凿,掷地金声。
言近旨远,韵味无穷。淋漓尽致,曲尽其妙。
独具匠心,匠心独运。笔底春风,笔下生花。
字字玑珠,句句珠玑。意味深长,耐人寻味。

人话

写作技巧高超,文章意境深远。内容真实感人,情感表达真诚。用词华丽而富有内涵,作者思维敏捷且才华出众。观察事物深刻透彻,分析问题直击要害。文笔生动活泼,才华横溢。文章如同行云流水般流畅自然。分析精辟,能够洞察细微之处。言语中充满智慧,让人读来兴趣盎然。剖析问题深入本质,能引发读者深思。给人以豁然开朗的感觉,像醍醐灌顶一般让人清醒。言辞确凿有力,话语坚定响亮。言简意赅却含义深远,令人回味无穷。表达淋漓尽致,把事情描绘得细致入微。构思独特巧妙,展现了作者的独特匠心。文笔优美,仿佛春风拂面,笔下的文字如同花朵盛开。每个字都精心雕琢,每一句话都充满力量。文章意味深长,值得反复品味。

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

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

相关文章

评价指标--深度学习

目录 1分类任务1.1 二分类1.1.1 含义介绍1.1.2 指标 1.2多分类 2图像分割2.1 常用指标2.2 具体含义2.3 代码实现 1分类任务 1.1 二分类 混淆矩阵 1.1.1 含义介绍 TP&#xff1a;预测为真所以是Positive&#xff0c;预测结果和真实结果一致所以为TrueTN&#xff1a;预测为假…

【Python 逆向滑块】(实战六)逆向滑块,并实现用Python+Node.js 生成滑块、识别滑块、验证滑块、发送短信

逆向日期&#xff1a;2024.08.04 使用工具&#xff1a;Python&#xff0c;Node.js 本章知识&#xff1a;逆向【NECaptchaValidate】参数并成功发送短信 文章难度&#xff1a;中等&#xff08;没耐心的请离开&#xff09; 文章全程已做去敏处理&#xff01;&#xff01;&#xf…

【SpringBoot】 定时任务之任务执行和调度及使用指南

【SpringBoot】 定时任务之任务执行和调度及使用指南 Spring框架分别通过TaskExecutor和TaskScheduler接口为任务的异步执行和调度提供了抽象。Spring还提供了支持应用程序服务器环境中的线程池或CommonJ委托的那些接口的实现。最终&#xff0c;在公共接口后面使用这些实现&…

POE服务机器人-快速开始

快速开始 POE与服务机器人部署服务机器人与poe集成迭代你的机器人其他 POE与服务机器人 在本快速入门指南中&#xff0c;我们将使用 Python 构建一个机器人服务器&#xff0c;然后将其与 Poe 集成。一旦您创建了由您的服务器驱动的 Poe 机器人&#xff0c;任何 Poe 用户都可以…

解密XXE漏洞:原理剖析、复现与代码审计实战

在网络安全领域&#xff0c;XML外部实体&#xff08;XXE&#xff09;漏洞因其隐蔽性和危害性而备受关注。随着企业对XML技术的广泛应用&#xff0c;XXE漏洞也逐渐成为攻击者们利用的重点目标。一个看似无害的XML文件&#xff0c;可能成为攻击者入侵系统的利器。因此&#xff0c…

R语言统计分析——描述性统计

参考资料&#xff1a;R语言实战【第2版】 1、整体统计 对于R语言基础安装&#xff0c;可以使用summary()函数来获取描述性统计量。summary()函数提供了最小值、最大值、四分位数、中位数和算术平均数&#xff0c;以及因子向量和逻辑向量的频数统计。 myvars<-c("mpg&…

JRT多维取数据三件套

今天补齐DolerData判断数据是否存在的API&#xff0c;即M的$d。 兜兜转转&#xff0c;经过近十年探索&#xff0c;3年的酝酿&#xff0c;10个月的开发&#xff0c;JRT终于集齐多维取数据三件套。分别是$get,$listget,$data。通过多维取数据的支持&#xff0c;JRT特别适合医疗数…

7.怎么配置一个axios来拦截前后端请求

首先创建一个axios.js文件 导入我们所需要的依赖 import axios from "axios"; import Element from element-ui import router from "./router"; 设置请求头和它的类型和地址 注意先注释这个url,还没有解决跨域问题,不然会出现跨域 // axios.defaults.…

6-5 多输入多输出通道

虽然我们在前面描述了构成每个图像的多个通道和多层卷积层。例如彩色图像具有标准的RGB通道来代表红、绿和蓝。 但是到目前为止&#xff0c;我们仅展示了单个输入和单个输出通道的简化例子。 这使得我们可以将输入、卷积核和输出看作二维张量。 当我们添加通道时&#xff0c;我…

搭建高可用OpenStack(Queen版)集群(一)之架构环境准备

一、搭建高可用OpenStack&#xff08;Queen版&#xff09;集群之架构环境准备 一、架构设计 二、初始化基础环境 1、管理节点创建密钥对&#xff08;方便传输数据&#xff09; 所有控制节点操作 # ssh-keygen #一路回车即可 Generating public/private rsa key pair. Enter f…

MTK Android12 分析system_app允许vendor_mtk_audiohal_prop SELinux 权限问题

本文将尝试分析&#xff0c;在开发 Android 12 MTK 平台时遇到了 vendor_mtk_audiohal_prop 属性相关的 SELinux 权限问题。包括如何修改 SELinux 策略以允许 system_app 设置 vendor_mtk_audiohal_prop 属性。 问题描述 希望允许 system_app 设置 vendor_mtk_audiohal_prop 属…

SpringBoot+Vue图书(图书借阅)管理系统-附项目源码与配套文档

摘 要 本论文阐述了一套先进的图书管理系统的设计与实现&#xff0c;该系统采用Java语言&#xff0c;结合现代Web开发框架和技术&#xff0c;旨在为图书馆提供高效、灵活且用户友好的资源管理解决方案。系统利用Spring Boot框架为核心&#xff0c;整合MyBatis ORM工具&#…

基于 systemc-2.3.1的virtual device 接入 qemu-arm

1&#xff0c;下载systemc-2.3.1 下载网址&#xff1a; SystemC Files $ wget https://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.1.tgz 2&#xff0c;编译安装 systemc-2.3.1 tar zxf systemc-2.3.1.tgz cd systemc-2.3.1/ export CXXg mkdir bu…

PS 2024 百种常用插件下载安装教程【免费使用,先到先得】

文章目录 软件介绍软件下载安装步骤 专栏推荐&#xff1a; 超多精品软件&#xff08;持续更新中…&#xff09; 软件推荐&#xff1a; PS 2024 PR 2024 软件介绍 PS常用插件 此软件整合了市面近百款ps处理插件&#xff0c;可实现&#xff1a;一键制作背景&#xff0c;一键抠图…

linux安装docker(实操教程)

一、安装前准备工作 1.查看服务器操作系统版本 2.查看服务器的操作系统内核版本 3.安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2如果不是root用户登陆的系统&#xff0c;需要手动输入sudo -i切换到root帐户 4.设置阿里云docker-ce镜像源 yum-c…

美国失业率大幅上升,增加九月份降息利率的可能性

令人失望的是&#xff0c;美国7月份经济增加了11.4万个工作岗位&#xff0c;低于预期的17.5万个和6月的17.9万个。平均小时工资持续下降&#xff0c;但失业率升至4.3%。美元继续走低&#xff0c;美国国债也在下跌&#xff0c;而黄金则获得了提振。 7月份的非农业支付数据令人失…

ST语言支持包下载安装(VS CODE)

VSCODE是微软提供的代码编辑器&#xff0c;支持非常多的语言。 1、VSCODE下载 2、ST语言支持包 3、ST语言支持包下载 4、ST语言 。。

IndentationError: expected an indented block 深度解析

IndentationError: expected an indented block 深度解析与实战指南 在Python编程中&#xff0c;IndentationError: expected an indented block是一个常见的错误&#xff0c;通常发生在代码块没有正确缩进时。这个错误表明代码中存在格式问题&#xff0c;可能是缩进不一致或缺…

基于PFC和ECN搭建无损RoCE网络的工作流程分析

无损RoCE网络概念 RDMA&#xff08;Remote Direct Memory Access&#xff0c;远程直接内存访问&#xff09;是一种为了解决网络传输中服务器端数据处理延迟而产生的技术。RDMA 将用户应用中的数据直接传入服务器的存储区&#xff0c;通过网络将数据从一个系统快速传输到远程系…

力扣421.数组中两个数的最大异或和

力扣421.数组中两个数的最大异或和 __builtin_clz()&#xff1a;求出mx二进制最高位之后的0的个数 class Solution {public:int findMaximumXOR(vector<int>& nums) {int mx *max_element(nums.begin(),nums.end());//__builtin_clz函数int high_bit mx ? 31 -…