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

yizhihongxing

实现搜索引擎自动补全功能的一种方式是通过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数据类型的值拷贝函数(深拷贝)的攻略: 什么是深拷贝 在 JS 中,我们把变量分为两类:基础类型和引用类型。基本类型的值直接存储在栈(stack)中,而引用类型的值存储在堆(heap)中,变量实际上是一个指针指向对应的地址。因此,基础类型变量的修改不影响其他变量,而引用类型变量的修改会影响所有指向同一地址的变量。而深拷贝就是将原始数据类型和引用…

    JavaScript 2023年6月10日
    00
  • js显示时间 js显示最后修改时间

    下面是关于“js显示时间 js显示最后修改时间”的详细讲解及示例: 一、JS显示时间 1. 在HTML页面上显示当前时间 我们可以使用以下JavaScript代码来在HTML页面上显示当前时间: <p id="time"></p> <script> var now = new Date(); var h…

    JavaScript 2023年5月27日
    00
  • 浅谈javascript中的 “ && ” 和 “ || ”

    浅谈JavaScript中的 “&&” 和 “||” 在JavaScript中,逻辑运算符包括“与”(&&)、“或”(||)及“非”(!)三种,其中“与”和“或”经常被用来作为条件判断语句中的关键字。本篇文章将会详细讲解“与”(&&)和“或”(||)这两个运算符的用法以及其常见应用场景。 “与”(&&a…

    JavaScript 2023年5月17日
    00
  • js 上传文件预览的简单实例

    下面是针对“js上传文件预览的简单实例”的攻略,具体步骤如下: 准备工作 在开始编写 js 上传文件预览的代码之前,需要先准备好以下工作: 一个文本编辑器,用于编写代码。 一个支持 JavaScript 的浏览器,用于运行代码和进行预览。 需要用到的 HTML 和 CSS 代码,用来实现页面布局和样式。 实现方法 具体实现 js 上传文件预览,需要分以下几个…

    JavaScript 2023年5月27日
    00
  • js 函数调用模式小结

    JS 函数调用模式小结 函数是 JavaScript 中的重要部分,函数可以通过多种方式调用。在本文中,我们将总结函数的几种调用模式,以及它们的区别和应用场景。 函数调用模式 1. 函数调用模式 这是最基本的一种调用模式。直接使用函数名并传递参数进行调用即可。 function printHello(name){ console.log(`Hello, ${…

    JavaScript 2023年5月27日
    00
  • js插件方式打开pdf文件(浏览器pdf插件分享)

    下面是关于“js插件方式打开pdf文件(浏览器pdf插件分享)”的完整攻略: 1. 准备工作 在实现该功能前,需要将需要打开的pdf文件上传到服务器,并记住该文件的访问地址。 2. 确认浏览器是否支持pdf插件 首先,需要确认当前浏览器是否提供了自带的pdf插件或者是否安装了第三方的pdf插件。 可以让用户打开一个测试页面,例如: <!DOCTYPE …

    JavaScript 2023年5月27日
    00
  • axios学习教程全攻略

    axios学习教程全攻略 本教程旨在为初学者提供一份完整的axios学习攻略,帮助初学者了解并学会使用axios来完成前端的网络请求。 什么是axios Axios是一个基于Promise的HTTP客户端库,可以用于浏览器和Node.js中对http请求进行处理。axios的最大特点是支持链式调用和拦截器,同时使用简单方便,适合在项目中进行网络请求。 安装a…

    JavaScript 2023年5月19日
    00
  • JavaScript从数组中删除指定值元素的方法

    以下是JavaScript从数组中删除指定值元素的方法的完整攻略: 使用splice方法 splice方法可以实现在数组中添加或删除元素。 要想删除指定值元素,需要使用indexOf方法查找该元素在数组中的位置,然后使用splice方法删除该位置的元素。 示例1:删除数组中第一个指定值的元素。 let arr = [1, 2, 3, 4, 5, 4]; le…

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