You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现仅检索站内页面的网站搜索栏功能?

实现站内页面检索的搜索栏方案

根据你已完成的搜索栏基础代码,以下是两种无需调用谷歌搜索的站内检索实现方案,适配不同类型的站点:


方案一:纯前端静态站内搜索(适合静态生成站点,如Hexo、Jekyll)

1. 调整现有HTML结构

添加搜索结果展示区域,并修改表单提交逻辑:

<div class="search-head">
        <form class="search-bar" id="site-search-form">
            <input class="search-barinpt" type="text" id="search-input" placeholder="Search Here"/> 
            <button type="submit"><img class="search-img" src="/images-for-website/search-icon.png"></button>             
        </form>
        <!-- 搜索结果展示容器 -->
        <div id="search-results" class="search-results"></div>
</div>

2. 编写搜索逻辑JavaScript

方式A:预定义页面索引数据

如果站点页面数量不多,可直接在JS中定义页面索引:

// 存储站内可检索页面的索引数据,包含标题、链接、内容摘要
const searchIndex = [
    { title: "首页", url: "/", content: "网站首页的核心内容介绍..." },
    { title: "教程页面", url: "/tutorial", content: "本站提供的前端开发教程内容..." },
    // 补充其他页面的索引信息
];

const searchForm = document.getElementById('site-search-form');
const searchInput = document.getElementById('search-input');
const searchResults = document.getElementById('search-results');

// 监听表单提交事件
searchForm.addEventListener('submit', function(e) {
    e.preventDefault(); // 阻止默认跳转
    const query = searchInput.value.trim().toLowerCase();
    
    if (!query) {
        searchResults.innerHTML = '<p>请输入搜索关键词</p>';
        return;
    }

    // 筛选匹配的页面
    const matchedResults = searchIndex.filter(item => {
        return item.title.toLowerCase().includes(query) || 
               item.content.toLowerCase().includes(query);
    });

    // 渲染搜索结果
    if (matchedResults.length === 0) {
        searchResults.innerHTML = '<p>未找到匹配的内容</p>';
    } else {
        let resultHtml = '<ul>';
        matchedResults.forEach(item => {
            resultHtml += `<li><a href="${item.url}">${item.title}</a><p>${item.content.substring(0, 100)}...</p></li>`;
        });
        resultHtml += '</ul>';
        searchResults.innerHTML = resultHtml;
    }
});

方式B:自动生成索引文件(适合页面较多的静态站点)

可以通过站点构建工具(如Gulp、Webpack)在编译时自动抓取所有页面内容,生成search-index.json文件,再通过JS加载:

// 加载预先生成的索引文件
fetch('/search-index.json')
    .then(response => response.json())
    .then(data => {
        window.searchIndex = data;
    });

方案二:后端驱动的站内搜索(适合动态站点,如PHP、Node.js)

1. 修改表单提交地址

将表单的action指向后端处理脚本,指定请求方式为GET:

<div class="search-head">
        <form class="search-bar" action="/search.php" method="GET">
            <input class="search-barinpt" type="text" name="query" placeholder="Search Here"/> 
            <button type="submit"><img class="search-img" src="/images-for-website/search-icon.png"></button>             
        </form>
</div>

2. 编写后端处理逻辑(以PHP为例)

假设站点内容存储在数据库的pages表中,包含title、url、content字段:

<?php
// search.php
$searchQuery = isset($_GET['query']) ? trim($_GET['query']) : '';
$results = [];

if ($searchQuery) {
    // 数据库连接配置(根据实际情况修改)
    $dbConn = mysqli_connect('localhost', '数据库用户名', '数据库密码', '数据库名');
    if (!$dbConn) {
        die('数据库连接失败');
    }

    // 使用预处理语句防止SQL注入
    $stmt = mysqli_prepare($dbConn, "SELECT title, url, content FROM pages WHERE title LIKE ? OR content LIKE ?");
    $likeKeyword = "%$searchQuery%";
    mysqli_stmt_bind_param($stmt, "ss", $likeKeyword, $likeKeyword);
    mysqli_stmt_execute($stmt);
    $queryResult = mysqli_stmt_get_result($stmt);

    while ($row = mysqli_fetch_assoc($queryResult)) {
        $results[] = $row;
    }

    mysqli_stmt_close($stmt);
    mysqli_close($dbConn);
}
?>

<!-- 搜索结果页面渲染 -->
<!DOCTYPE html>
<html>
<head>
    <title>搜索结果</title>
    <!-- 引入站点全局样式 -->
</head>
<body>
    <div class="search-head">
        <form class="search-bar" action="/search.php" method="GET">
            <input class="search-barinpt" type="text" name="query" value="<?php echo htmlspecialchars($searchQuery); ?>" placeholder="Search Here"/> 
            <button type="submit"><img class="search-img" src="/images-for-website/search-icon.png"></button>             
        </form>
    </div>

    <div class="search-results">
        <?php if (empty($results)): ?>
            <p>未找到匹配的内容</p>
        <?php else: ?>
            <ul>
                <?php foreach ($results as $item): ?>
                    <li>
                        <a href="<?php echo htmlspecialchars($item['url']); ?>"><?php echo htmlspecialchars($item['title']); ?></a>
                        <p><?php echo substr(htmlspecialchars($item['content']), 0, 100); ?>...</p>
                    </li>
                <?php endforeach; ?>
            </ul>
        <?php endif; ?>
    </div>
</body>
</html>

内容的提问来源于stack exchange,提问作者kayla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:22:46