Ajax实现搜索引擎自动补全功能

实现搜索引擎自动补全功能的一种方式是通过Ajax技术来异步获取匹配结果,并动态更新在页面上。

以下是具体步骤:

1. 构建搜索表单

构建一个包含搜索框的表单,需要设置一个 input 元素的 idsearch,表示搜索输入框。

<form>
  <input type="text" id="search" name="q" placeholder="搜索..." autocomplete="off">
</form>

2. 编写Javascript代码

首先使用 jQuery 库,绑定输入框的 keyup 事件,并在事件处理函数中异步获取匹配结果,将匹配结果更新到下拉列表中,最后将下拉列表显示出来。

$(function () {
  // 获取搜索框输入元素
  var searchInput = $('#search');
  // 获取下拉列表容器元素
  var dropdown = $('<ul>').addClass('dropdown-menu').appendTo('body');
  // 绑定搜索框输入事件
  searchInput.on('keyup', function () {
    // 获取输入框内容
    var searchValue = searchInput.val().trim();
    // 如果输入框内容为空,则隐藏下拉列表
    if (searchValue.length === 0) {
      dropdown.hide();
      return;
    }
    // 使用Ajax异步获取匹配结果
    $.get('/search?q=' + searchValue, function (data) {
      // 清空下拉列表
      dropdown.empty();
      // 遍历匹配结果,将每个结果添加为下拉列表项
      data.forEach(function (item) {
        $('<li>').addClass('dropdown-item').text(item).appendTo(dropdown);
      });
      // 显示下拉列表
      dropdown.show();
    });
  });
});

3. 创建服务端API

默认情况下,$.get() 方法请求的是当前页面路径加上指定的URL。因此,需要在服务器端提供一个API来处理搜索请求,并返回匹配的结果。

示例1:使用 Node.js Express 框架提供搜索API:

const app = require('express')();
app.get('/search', function(req, res) {
  // 根据请求参数 q 进行搜索,返回匹配结果
  let results = search(req.query.q);
  res.json(results);
});

示例2:使用 PHP 提供搜索API:

<?php
$q = $_GET['q'];
// 根据参数 q 进行搜索,返回匹配结果
$results = search($q);
header('Content-Type: application/json');
echo json_encode($results);
?>

4. 样式设计

需要为下拉列表设置样式,使它呈现出下拉菜单的形态。例如,将下拉列表的容器设置为绝对定位,跟随搜索框的位置进行定位;设置背景颜色、边框、阴影等样式。

.dropdown-menu {
  position: absolute;
  margin-top: 0.3rem;
  z-index: 1000;
  list-style: none;
  background-color: #fff;
  border: 1px solid rgba(0,0,0,.15);
  box-shadow: 0 6px 12px rgba(0,0,0,.175);
  border-radius: 0.25rem;
  width: 100%;
}
.dropdown-item {
  display: block;
  padding: 0.25rem 1.5rem;
  clear: both;
  font-weight: 400;
  color: #212529;
  text-align: inherit;
  white-space: nowrap;
  background-color: transparent;
  border: 0;
}
.dropdown-item:hover {
  color: #16181b;
  background-color: #f8f9fa;
}

到此为止,一个简单的 Ajax 实现搜索引擎自动补全功能的例子就完成了。

示例3:扩展功能

  1. 通过键盘上下键选择匹配结果,并通过回车键提交选中结果到搜索框。
// 绑定下拉列表项 hover 事件
dropdown.on('hover', 'li', function () {
  // 将 hover 状态的列表项设置为 active 样式,并移除兄弟节点的 active 样式
  $(this).addClass('active').siblings('.active').removeClass('active');
});
// 绑定键盘事件
searchInput.on('keydown', function (event) {
  var keyCode = event.which;
  switch(keyCode) {
    // 上键
    case 38:
      event.preventDefault();
      var active = dropdown.find('.active');
      if (active.length) {
        active.prev().addClass('active').siblings('.active').removeClass('active');
      } else {
        dropdown.children().last().addClass('active');
      }
      break;
    // 下键
    case 40:
      event.preventDefault();
      var active = dropdown.find('.active');
      if (active.length) {
        active.next().addClass('active').siblings('.active').removeClass('active');
      } else {
        dropdown.children().first().addClass('active');
      }
      break;
    // 回车键
    case 13:
      event.preventDefault();
      var active = dropdown.find('.active');
      if (active.length) {
        searchInput.val(active.text());
        dropdown.hide();
      }
      break;
  }
});
  1. 防抖或节流,减少Ajax请求次数。
// 使用 underscore 或 lodash 库提供的 debounce 或 throttle 方法
searchInput.on('keyup', _.throttle(function () {
  // ...
}, 500));

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Ajax实现搜索引擎自动补全功能 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JS实现的哈夫曼编码示例【原始版与修改版】

    下面我将详细讲解一下“JS实现的哈夫曼编码示例【原始版与修改版】”的完整攻略,包含了两个示例。 哈夫曼编码简介 哈夫曼编码也叫霍夫曼编码,是一种基于变长编码的编码方式。它采用前缀编码的方式,即每个字符的编码都不是其他字符编码的前缀,保证解码的唯一性。哈夫曼编码常被用于数据的压缩和传输,例如常见的压缩文件格式gzip、zip等,以及在网络通信中的数据传输。 原…

    JavaScript 2023年5月19日
    00
  • 使用JavaScript获取Request中参数的值方法

    让我们来详细讲解使用JavaScript获取Request中参数的值方法的完整攻略。获取Request参数值的过程分为两个步骤: 获取当前URL中所有参数的键值对 根据需要获取指定参数的值 获取当前URL中所有参数的键值对 通过以下代码可以获取当前URL中的所有参数的键值对: function getAllUrlParams(url) { var query…

    JavaScript 2023年6月11日
    00
  • JS获取农历日期具体实例

    下面就来讲解“JS获取农历日期具体实例”的完整攻略。 步骤1:引入农历计算代码 获取农历日期需要用到农历计算代码,这里主要介绍一个轻量级的农历计算库lunar-js,具体项目地址可查看GitHub。下载后可在页面上通过script标签引入。如下: <script type="text/javascript" src="lu…

    JavaScript 2023年5月27日
    00
  • Element Input输入框的使用方法

    Element Input输入框的使用方法 Element是一款基于Vue.js的UI框架,其中的Input组件可以用来创建表单输入框。本文将详细介绍Element Input输入框的使用方法,让您可以轻松使用该组件来创建表单。 安装 使用Element Input输入框,您需要先引入Element UI: <link rel="styles…

    JavaScript 2023年6月10日
    00
  • javascript中this的四种用法

    当我们使用JavaScript进行编程时,经常会使用到this关键字。this的含义在不同的情况下有不同的用法。下面将详细讲解Javascript中this的四种用法。 1. 默认绑定 默认绑定是指当我们调用一个函数时,如果该函数中使用了this,而且该函数没有使用任何上下文绑定的方法,那么this的值就是全局对象(在浏览器中就是window对象)。 以下是…

    JavaScript 2023年5月18日
    00
  • 使用GruntJS链接与压缩多个JavaScript文件过程详解

    在这里我将为你详细讲解如何使用GruntJS链接和压缩多个JavaScript文件。我们将顺序进行以下步骤: 安装grunt-cli和grunt-contrib-concat,grunt-contrib-uglify插件。 在开始之前,我们需要先确保你的系统上安装了npm,它是整个Grunt工具链的基础。接下来,在终端中运行以下命令,安装grunt-cli和…

    JavaScript 2023年5月27日
    00
  • javascript asp教程第六课– response方法

    下面是详细讲解“javascript asp教程第六课– response方法”的完整攻略: 一、什么是response对象? 在 ASP 中,response 对象代表向客户端发送输出时使用的方法和属性。它允许 ASP 页面向客户端浏览器发送文本、HTML、XML 或任何其他类型的数据。下面是response对象的一些常用方法: Write(strTex…

    JavaScript 2023年5月28日
    00
  • javascript中闭包closure的深入讲解

    JavaScript中闭包(closure)的深入讲解 在JavaScript中,闭包是一个非常重要的概念,也是面试中经常考察的知识点。下面将深入讲解JavaScript中闭包的概念、特点和使用方法。 什么是闭包 闭包指的是在一个函数内部使用另一个函数的变量,形成了一个作用域链,外部函数或其他地方无法访问这个内部函数的变量,但内部函数可以访问外层函数的变量。…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部