文档搜索引擎模块划分(第一篇)见系列文章:

https://blog.csdn.net/m0_63299495/article/details/145805937?spm=1011.2415.3001.5331https://blog.csdn.net/m0_63299495/article/details/145805937?spm=1011.2415.3001.5331

索引模块程序见下文:

https://blog.csdn.net/m0_63299495/article/details/157515700?spm=1011.2415.3001.5331https://blog.csdn.net/m0_63299495/article/details/157515700?spm=1011.2415.3001.5331

 搜索模块程序见下文:

https://blog.csdn.net/m0_63299495/article/details/157732509?spm=1011.2415.3001.5331https://blog.csdn.net/m0_63299495/article/details/157732509?spm=1011.2415.3001.5331

web模块后端部分见下文:

https://blog.csdn.net/m0_63299495/article/details/157767891?spm=1011.2415.3001.5331https://blog.csdn.net/m0_63299495/article/details/157767891?spm=1011.2415.3001.5331

本篇为web模块前端部分。


目录

6.1 webapp目录结构以及jquery

6.2 index.html

6.2.1 CSS部分

6.2.2 JS部分

6.3 部分问题及其处理方式


6.1 webapp目录结构以及jquery

image存放项目相关图片,js存放javascript代码,index.html是前端HTML文件。

ajax(Asynchronous JavaScript and XML)是前后端交互的常用手段,jquery是js的第三方库。

jquery下载链接如下:https://jquery.com/download/

打开后拷贝页面内容至jquery.js即可。

6.2 index.html

6.2.1 CSS部分

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Java API Document Search Engine</title>
</head>
<body>
    <!-- 1. 搜索框+搜索按钮 -->

    <div class="container">
        <div class="header">
            <input type="text">
            <button id="search-btn" >搜索</button>
        </div>
    <!-- 2. 显示搜索结果 -->
        <div class="result">
            <!-- 包含多条记录 -->
            <!-- 每个item表示一条记录 -->
        </div>
    </div>
    
    <style>
        /* 样式 */
        /* 去掉浏览器默认样式 */
        *{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        /* 指定整体页面与浏览器窗口一样高 */
        html,body{
            height: 100%;  /*表示html与其父元素(即浏览器窗口)等高,body与其父元素html等高*/
            /*设置背景图*/
            background-image: url("image/bgDemo3.jpg");
            /*设置背景图不平铺*/
            background-repeat: no-repeat;
            /*设置背景图位置*/
            background-position: center center;
            /*设置背景图大小 */
            background-size: cover;
        }
        .container{
            /* 设置宽度与高度 */
            width: 1250px;
            height: 100%;  /*表示与其父元素body等高*/
            /* 设置水平居中 */
            margin: 0 auto;
            /* 设置背景色使得版心与背景图可分开 */
            background-color: rgb(176, 196, 222,0.6);
            /* 设置圆角矩形 */
            border-radius: 10px;
            /* 设置内边距,避免文字内容紧贴边界*/
            padding: 40px;
            /* 超出元素的部分将自动形成一个滚动条 */
            overflow: auto;
        }
        .header{
            width: 100%;
            height:50px;
            display: flex; /*弹性布局*/
            justify-content:space-between; /*水平方向*/
            align-items: center;/*垂直方向*/
        }
        .header>input{
            width: 1000px;
            height: 40px;
            font-size: 20px;
            line-height:45px;
            padding-left: 10px;
            border-radius: 5px;
            background-color: rgb(193, 201, 211);
            font-family: "微软雅黑";
            border:none;
        }
        .header>button{
            width: 150px;
            height: 40px;
            background-color: SteelBlue;
            color: aliceblue;
            font-family: "黑体";
            font-weight: bold;
            font-size:23px;
            line-height: 45px;
            border-radius: 5px;
            border: none;
        }
        /* 伪类选择器*/
        .header>button:active{
            background-color: rgb(46, 86, 119);
        }
        .item {
            width:100%;
            margin-top:20px;
        }
        .item a{
            display: block; /*转为块级元素*/
            height: 40px;
            font-size: 21px;
            line-height: 40px;
            font-weight: 600;
            color: rgb(27, 68, 192);
        }
        .item .desc{
            font-size: 16px;
            font-family: "微软雅黑";
        }
        .item .url{
            font-size: 14px;
            color:LimeGreen;
        }
    </style>
</body>
</html>

6.2.2 JS部分

<script src="js/jquery.js"></script>
    <script>
        let button = document.querySelector("#search-btn");
        button.onclick = function(){
            // 获取输入框内容
            let input = document.querySelector(".header input");
            let query = input.value;
            console.log(query);
            // 构造ajax请求
            $.ajax({
                type:"GET",
                url:"searcher?query="+query,
                success: function(data, status){
                    // success在请求成功后调用
                    // data表示获得的结果数据,status表示HTTP状态码
                    console.log(data);
                    buildResult(data);
                }
            })
        }
        // buildResult函数:将响应数据构造成页面内容
        function buildResult(data){
            // 遍历data中的每个元素,对每个元素都创建一个div.item;
            // 对每一个div.item分别构造标题、url、描述后,将div.item插入div.result
            // 基于DOM API完成

            let result = document.querySelector('.result');
            // 清空上次结果
            result.innerHTML='';

            for(let item of data){
                let itemDiv = document.createElement('div');
                itemDiv.className='item';
                // 构造标题
                let title = document.createElement('a');
                title.href=item.url;
                title.innerHTML=item.title;
                title.target="_blank";
                itemDiv.appendChild(title);
                // 构造描述
                let desc = document.createElement('div');
                desc.className='desc';
                desc.innerHTML=item.desc;
                itemDiv.appendChild(desc);
                // 构造url
                let url = document.createElement('div');
                url.className = 'url';
                url.innerHTML=item.url;
                itemDiv.appendChild(url);

                result.appendChild(itemDiv);
            }
        }
    </script>

将js部分拼接在<body>标签下,<style>标签后即可。

6.3 部分问题及其处理方式☆☆☆

(1)内容超出一个屏幕:

设置CSS属性令当前内容在.container这个div内部滚动,而非在整个页面滚动,即overflow: auto;

(2)点击标题后搜索结果页被目标页面替换:

给a标签增加target="_blank"属性,表示新开空白页面填充目标页面,即:title.target="_blank";

(3)多次搜索后,搜索结果拼接:

buildResult方法被回调后,直接进行追加而没有清理,每次查询都追加一次,导致多次搜索结果合并。应在每次追加前清空上次搜索结果,即:result.innerHTML='';

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐