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日

相关文章

  • 给localStorage设置一个过期时间的方法分享

    下面我将详细讲解如何给localStorage设置一个过期时间的方法。 为什么需要设置localStorage过期时间? localStorage 是浏览器提供的本地存储空间,能够将数据存储在用户的设备本地。然而,这种存储方式有个缺点,就是数据存储在本地后不会自动过期,数据会一直存在于设备上,除非用户手动删除或清空。这就会导致用户存储的数据越来越多,浏览器的…

    JavaScript 2023年6月10日
    00
  • javascript 终止函数执行操作

    如果在 JavaScript 函数中需要提前结束函数的执行,有几种方法可以实现终止函数执行操作。下面是几种常用的方式: 1. 使用return语句 在 JavaScript 函数中,可以使用return语句来提前结束函数的执行。当函数执行到return语句时,函数将立即停止执行并返回指定的值。如果return语句没有指定一个值,函数将返回undefined。…

    JavaScript 2023年5月27日
    00
  • Js 获取HTML DOM节点元素的方法小结

    那么首先介绍一下什么是DOM。 DOM简介 DOM,即文档对象模型(Document Object Model),是一种针对XML但经过扩展用于HTML的应用程序编程接口(API)。它为访问和操作HTML或XML文件提供了一种特定的结构化方式,使得开发者可以对文档的内容和结构进行添加、修改、删除或查找等操作。 Js 获取HTML DOM节点元素的方法小结 在…

    JavaScript 2023年6月10日
    00
  • javascript window.opener的用法分析

    接下来我将详细讲解“JavaScript window.opener的用法分析”。 什么是window.opener window.opener 是一个指向打开当前窗口的父窗口的引用,它可以让我们在新开的窗口中与原来打开该窗口的父窗口进行通讯操作。如果当前窗口不是通过 window.open 打开的而是在当前窗口内直接打开了另一个窗口,此时该属性值为 nul…

    JavaScript 2023年6月11日
    00
  • JavaScript 完成注册页面表单校验的实例

    下面是 JavaScript 完成注册页面表单校验的实例的完整攻略: 一、概述 在网站的注册页面中,为了防止用户输入错误或不符合规范的信息,通常需要进行表单校验。JavaScript 能够很好地完成这个任务。 二、前置知识 HTML 基础知识 JavaScript 基础知识 三、实现过程 首先,在 HTML 中编写注册页面表单。 <form> &…

    JavaScript 2023年6月10日
    00
  • JS动态加载当前时间的方法

    JS动态加载当前时间的方法可以通过以下步骤实现: 1. 创建一个容器元素 首先,我们需要在HTML文件中创建一个容器元素用于显示当前时间。可以选择使用div、p、span等标签。 <div id="current-time"></div> 2. 获取当前时间 接着,我们需要使用JS代码获取当前时间。可以使用Date…

    JavaScript 2023年5月27日
    00
  • 纯jsp实现的倒计时动态显示效果完整代码

    下面是实现纯jsp实现的倒计时动态显示效果完整代码攻略。 1. 实现原理 倒计时动态显示效果的实现原理是通过js倒计时功能实现动态效果,然后将倒计时的时间以jsonp格式传递到服务器端,服务器端通过jsp读取到jsonp数据并通过JSTL表达式解析并进行动态页面输出,从而实现了倒计时的动态效果,并将显示效果不断地随时间改变。 2. 实现步骤 创建一个html…

    JavaScript 2023年6月11日
    00
  • js实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色

    实现GridView单选效果自动设置交替行、选中行、鼠标移动行背景色的过程分为以下几步: HTML结构构建 先构建一个table,需要注意每个单元格需要有一个唯一的id值,如下所示: <table id="myGridview"> <thead> <tr> <th>ID</th>…

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