JS 页面内容搜索,类似于 Ctrl+F功能的实现代码

实现类似于 Ctrl+F 功能的 JS 页面内容搜索,需要基于两个核心 API:window.find()window.getSelection()

window.find()

window.find() 方法用于在当前页面中查找指定的字符串,并返回一个布尔值表示是否检索到该字符串。该方法可以接收三个参数,依次为:

  • 要查找的字符串
  • 是否区分大小写(可选,true 或 false,默认为 false)
  • 是否在父容器内查找(可选,true 或 false,默认为 false)

示例1:简单使用 window.find() 方法

if (window.find("搜索的内容")) {
  console.log("找到了");
} else {
  console.log("未找到");
}

window.getSelection()

window.getSelection() 方法用于获取用户当前选中的文本内容,返回一个 Selection 对象。该对象包含被选中的文本、选中文本的起始和结束节点、选中文本选中时光标的位置等信息。文本内容可以通过 Selection.toString() 方法获取。

示例2:基于 window.getSelection() 实现高亮显示搜索内容

<input type="text" id="searchInput" placeholder="请输入想要搜索的内容">
<button onclick="search()">搜索</button>
<div>
  <p>这是一段文本,里面可能包含要搜索的内容。</p>
  <p>这是一段更长的文本,里面也可能包含要搜索的内容。</p>
  <p>这是最后一段文本。</p>
</div>

<script>
function search() {
  const input = document.getElementById("searchInput");
  const query = input.value;

  if (!query) return;

  const div = document.querySelector("div");
  div.innerHTML = div.innerHTML.replace(/<span class="highlight">(.+?)<\/span>/g, "$1");

  const paragraphs = div.querySelectorAll("p");
  for (const p of paragraphs) {
    const text = p.textContent;
    const pattern = new RegExp(`(${query})`, "gi");
    const matches = text.match(pattern);

    if (matches) {
      const range = document.createRange();
      range.selectNodeContents(p);

      for (const match of matches) {
        const startIdx = text.indexOf(match);
        range.setStart(p.firstChild, startIdx);
        range.setEnd(p.firstChild, startIdx + match.length);

        const span = document.createElement("span");
        span.classList.add("highlight");
        span.appendChild(range.extractContents());
        range.insertNode(span);
      }
    }
  }
}
</script>

<style>
  .highlight {
    background-color: yellow;
  }
</style>

在这个示例中,我们使用了 window.getSelection() 方法获取用户选中的文本内容,然后使用 Range 对象将搜索到的内容高亮显示,并将查找的关键词包裹在 span.highlight 元素中,以便于后续的 CSS 样式调整。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS 页面内容搜索,类似于 Ctrl+F功能的实现代码 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JavaScript插件化开发教程 (三)

    下面我会详细讲解“JavaScript插件化开发教程 (三)”的完整攻略,包括背景、步骤及相关示例说明。 背景 在开发Web应用程序时,我们经常需要封装一些可重用的组件以提高开发效率,这时候插件化开发的思想就显得尤为重要。本教程将教会你如何使用JavaScript实现插件化开发。 步骤 步骤一:实现选项参数(options) 首先,我们需要实现一个选项参数(…

    JavaScript 2023年5月18日
    00
  • 当前流行的JavaScript代码风格指南

    当前流行的 JavaScript 代码风格指南 在 JavaScript 社区中,有很多流行的代码风格指南,比如 Airbnb JavaScript 代码风格指南,Google JavaScript 代码风格指南等。这些指南都提供了详细的代码规范和最佳实践,帮助开发者保证代码的质量和可读性。以下是一个完整的攻略。 1. 注释和命名规范 良好的注释和命名规范可…

    JavaScript 2023年5月19日
    00
  • JavaScript中的console.profile()函数详细介绍

    JavaScript中的console.profile()函数详细介绍 什么是console.profile()函数? console.profile() 函数是JavaScript中内置的一个控制台函数,它可以用来分析网站性能,定位瓶颈。当执行此函数时,浏览器会在控制台中打开一个新的性能分析面板,记录执行时间、调用堆栈、内存使用情况等详细信息,从而帮助我们…

    JavaScript 2023年5月28日
    00
  • JavaScript进制转换实现方法解析

    JavaScript进制转换实现方法解析 背景介绍 计算机科学中,常用的进制有10进制、2进制、16进制等,但在不同的计算机环境下,进制的使用差别很大。JavaScript中提供了一些进制转换函数,可以实现不同进制之间的转换。 实现步骤 JavaScript中提供了以下几个进制转换函数:1. parseInt(string, radix):将一个字符串转换为…

    JavaScript 2023年5月28日
    00
  • Angular服务Request异步请求的实例讲解

    下面是关于“Angular服务Request异步请求的实例讲解”的完整攻略。 标题:Angular服务Request异步请求的实例讲解 什么是Angular服务Request? Angular服务Request是Angular框架内置的一个服务,主要用于发送异步HTTP请求。Request服务是通过Angular注入系统使用的,因此我们只需要在组件或其他服务…

    JavaScript 2023年6月11日
    00
  • js中的this的指向问题详解

    下面给出“js中的this的指向问题详解”的完整攻略: 一、概述 在JavaScript中,this关键字总是指向调用该函数的对象。但是,在不同的情况下,this指向的对象也会有所不同。因此,理解this的指向问题对于JavaScript编程非常重要。 二、this的四种绑定方式 this的指向主要有四种绑定方式: 默认绑定:独立的函数调用,this指向全局…

    JavaScript 2023年6月10日
    00
  • js事件监听机制(事件捕获)总结

    JS事件监听机制(事件捕获)总结 什么是事件监听机制? JavaScript事件监听机制是指浏览器在特定条件下,允许开发者在特定的DOM元素上注册回调函数,以便在特定的事件发生时进行响应。 事件类型 目前常见的事件类型可以分为以下三类: 用户交互事件:click、mousedown、mouseover等; 浏览器事件:load、resize、error等; …

    JavaScript 2023年6月10日
    00
  • setTimeout时间设置为0详细解析

    setTimeout时间设置为0详细解析 什么是setTimeout? setTimeout是JavaScript的一个函数,它可以用来在一定延迟后执行一个函数。 语法如下: setTimeout(function, delay, arg1, arg2, …) 其中, function是要执行的回调函数。 delay是延迟的毫秒数,表示多长时间后执行回调…

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