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敏感词过滤代码是在前端使用JS实现对输入内容进行敏感词的过滤,以保证输入内容的合规和安全。 以下是JS敏感词过滤代码的完整攻略: 前置知识 正则表达式:JS敏感词过滤涉及到正则表达式的使用,需要了解正则表达式的使用方法。 JS基础语法:需要掌握JS基础语法,包括变量定义、函数定义等。 过程说明 第一步:定义敏感词列表 首先需要定义一个敏感词列表,用于保存…

    JavaScript 2023年6月10日
    00
  • JavaScript高级程序设计 DOM学习笔记

    我将为您详细讲解“JavaScript高级程序设计 DOM学习笔记”的完整攻略。 学习JS DOM的必要性 JavaScript中,DOM(文档对象模型)是一种非常重要的知识点,它是在HTML和XML文档中操作和访问节点的API。掌握DOM可以让我们更加灵活地操作页面元素,更好地实现网页的交互效果。 学习JS DOM的入门 获取元素 在DOM中,我们首先要学…

    JavaScript 2023年5月27日
    00
  • 详解JS中你不知道的各种循环测速

    详解JS中你不知道的各种循环测速 前言 在 JavaScript 中,循环是最常用的控制结构之一。不同类型的循环可能具有不同的性能,有时甚至会对程序的性能产生重大的影响。本文将介绍 JavaScript 中常见的各种循环类型,并通过实例演示其性能差异。 常见循环类型 for 循环 for 循环是 JavaScript 中最常见、最基本也是最容易理解的循环类型…

    JavaScript 2023年5月28日
    00
  • Javascript NaN 属性

    以下是关于JavaScript NaN属性的完整攻略。 JavaScript NaN属性 JavaScript NaN属性是全局对象的一个属性,它表示“Not a Number”,不是数字。当一个值无法被解析为数字时,就返回NaN。NaN是一个特殊的数字值,它与任何其他值都不相等,包括它自己。 下面是一个使用NaN属性的示例: console.log(NaN…

    JavaScript 2023年5月11日
    00
  • 浅谈golang的http cookie用法

    浅谈golang的http cookie用法 什么是Cookie? HTTP协议是无状态的,也就是说,当客户端加载一个页面或者访问一个接口时,服务器并不知道这个请求与之前的请求之间有关系,而Cookie就是为了解决这个问题的,它可以把一些关键性的信息,如用户的登录状态等,保存在客户端,以便在后续的请求中向服务器传递这些信息。 Cookie有两种类型,分别是s…

    JavaScript 2023年6月11日
    00
  • ie下动态加态js文件的方法

    在IE下动态加载JS文件有几种方法,我会分别介绍其中两种,分别是使用<script>标签动态插入和使用XMLHttpRequest进行异步加载。 使用标签动态插入 在IE中,可以通过向DOM树中添加<script>标签来动态加载JS文件。 function loadScript(url, callback) { var script …

    JavaScript 2023年5月27日
    00
  • 使用script的src实现跨域和类似ajax效果

    使用script的src属性实现跨域和类似ajax效果,是一种常见的解决网页数据获取和展示的方式。下面就具体讲解如何实现。 利用script的src属性解决跨域问题 当在网页中使用script的src属性加载跨域资源时,会受到同源策略的限制,无法直接获取资源。但我们可以通过一些技巧来绕过同源策略的限制,从而实现跨域。 JSONP JSONP是一种常用的跨域解…

    JavaScript 2023年6月11日
    00
  • JS加载解析Markdown文档过程详解

    以下是详细的攻略,在此过程中,假设使用的是原生JS,没有使用任何外部库: 1. 获取Markdown文档内容 要加载Markdown文档,我们首先需要获取文件内容。可以使用XMLHttpRequest对象进行同步或异步的文件读取。这里我们以异步的方式读取Markdown文件。 function loadMarkdownFile(url, callback) …

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