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数组的遍历方式for循环与for…in

    JS数组是常用的数据类型之一,数组中存放着一系列的元素,我们通过数组索引来访问这些元素。JS数组的遍历方式有许多,其中包括for循环和for…in两种方式。 for循环 for循环是JS中最常用的循环语句,用于对数组的元素进行遍历操作。for循环的语法格式如下: for (let i = 0; i < arr.length; i++) { // d…

    JavaScript 2023年5月27日
    00
  • es6中比较有用的7个技巧小结

    ES6中比较有用的7个技巧小结 ES6(2015年发布)是ECMAScript语言的第6个版本,其中增加了很多新特性和功能。下面将介绍最常用的7个ES6技巧,并给出一些示例。 技巧1:模板字符串 ES6中增加了模板字符串的概念,使用反引号 “ 包含字符串,可以在字符串中插入表达式。模板字符串还可以格式化字符串,使用 ${expression} 表达式语法进…

    JavaScript 2023年6月10日
    00
  • 如何在JavaScript中使用localStorage详情

    当我们在客户端开发中需要在用户的设备上存储一些数据时,可以使用localStorage。localStorage是HTML5的一个新特性,它允许你在客户端存储名称/值对,并且还支持在不同的浏览器标签之间共享数据。下面是在JavaScript中使用localStorage的详细攻略: 一、localStorage的基本使用 首先在JavaScript中使用lo…

    JavaScript 2023年6月11日
    00
  • JavaScript中的数组操作介绍

    当谈到JavaScript时,数组(Array)通常是最常用的数据结构之一。尤其在现代Web开发中,数组操作非常重要。下面我们将详细介绍JavaScript中的数组操作,内容包括以下几点: 声明和初始化数组 常用的数组操作方法 数组迭代器 示例 1. 声明和初始化数组 在JavaScript中声明和初始化数组有多种方式。最常见的方式是使用Array构造函数来…

    JavaScript 2023年5月18日
    00
  • js实现盒子滚动动画效果

    下面是关于”js实现盒子滚动动画效果”的完整攻略: 1.编写HTML结构 首先,在HTML文件中编写盒子结构,例如: <div class="container"> <div class="box" style="background-color: red;">Box 1&l…

    JavaScript 2023年6月10日
    00
  • JS实现回到页面顶部动画效果的简单实例

    下面我将为你详细讲解“JS实现回到页面顶部动画效果的简单实例”的完整攻略。 步骤1:HTML结构 首先,在页面中需要添加一个回到顶部的按钮。在 HTML 中添加一个 button 元素,并为其添加一个 id 属性,以方便在 JS 中使用。 <button id="backToTopBtn">回到顶部</button&gt…

    JavaScript 2023年6月10日
    00
  • 浅谈javascript中的加减时间

    浅谈JavaScript中的加减时间 在JavaScript中,可以通过一些内置的方法来对时间进行加减操作,本篇文章将讲解如何使用这些方法来实现时间的加减。 使用Date对象进行时间的加减 Date对象是JavaScript中表示时间的标准对象。它提供了多种方法来对时间进行加减操作。 加时间 通过调用Date对象的set方法,在原有时间的基础上添加一定的时间…

    JavaScript 2023年5月27日
    00
  • js判断当前页面用什么浏览器打开的方法

    判断当前页面使用的浏览器主要有两种方式:一种是通过navigator对象,一种是通过检测浏览器特有的全局变量。 通过navigator对象 在浏览器中,可以通过navigator对象获取关于浏览器的一些信息,包括浏览器名称、版本信息和操作系统等。通过判断浏览器名称和版本信息,我们可以判断当前页面使用的浏览器。 以下是示例代码: // 判断浏览器是否为IE i…

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