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

yizhihongxing

实现类似于 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 学习笔记(十三)Dom创建表格

    以下是对“JavaScript 学习笔记(十三)Dom创建表格”的详细讲解: 什么是DOM DOM(Document Object Model)是一种表示文档结构的方式,它将整个文档看做是一个文档树形结构,树形结构中的每个节点都一个文档对象,节点可以有属性,也可以有子节点。 在Web页面中,DOM树形结构代表了页面的结构,我们可以通过JavaScript来操…

    JavaScript 2023年6月10日
    00
  • Javascript Array valueOf 方法

    以下是关于JavaScript Array valueOf方法的完整攻略。 JavaScript Array valueOf方法 JavaScript Array valueOf方法用于返回数组本身。该方法返回的是数组对象本身,而不是数组中的元素。 下面是一个使用valueOf方法的示例: var arr = [1, 2, 3, 4, 5]; console…

    JavaScript 2023年5月11日
    00
  • Javascript Array toString 方法

    以下是关于JavaScript Array toString方法的完整攻略。 JavaScript Array toString方法 JavaScript Array toString方法用于将数组转换为字符串。该方法会将数组中的每个元素转换为字符串,并使用逗号分隔符将它们连接起来。 下面是一个使用toString方法的示例: var arr = [1, 2…

    JavaScript 2023年5月11日
    00
  • Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别

    一、Jsonp 关键字详解1. Jsonp的全称是“JSON with Padding”,即“带填充的JSON”。2. Jsonp是一种跨域请求方式,允许在不同域之间请求数据,常用于跨域解决方案。3. Jsonp的原理是利用script标签的src属性可以跨域加载资源的特性,通过在url中加入callback参数,将回调函数名传递给服务端,服务端返回一小段j…

    JavaScript 2023年5月27日
    00
  • JS根据json数组多个字段排序及json数组常用操作

    JS根据json数组多个字段排序及json数组常用操作 JSON数组是前端开发中常用的数据类型,掌握对JSON数组的操作是前端开发的必要技能之一。本文将详细讲解如何在JS中根据JSON数组中的多个字段进行排序,并介绍JSON数组常用的操作方法。 一、JSON数组排序 1.1 单字段排序 对于只有一个字段需要排序的JSON数组,可以使用Array.protot…

    JavaScript 2023年5月27日
    00
  • vue整合百度地图显示指定地点信息

    下面我会为您介绍Vue整合百度地图显示指定地点信息的完整攻略。 步骤一:申请百度地图开发者账号和JavaScript API密钥 首先需要申请百度地图开发者账号,然后在开发者中心获取JavaScript API密钥。 步骤二:安装百度地图JavaScript API SDK 在Vue项目中使用npm安装百度地图JavaScript API SDK,并在Vue…

    JavaScript 2023年5月19日
    00
  • Javascript Array toLocaleString 方法

    以下是关于JavaScript Array toLocaleString方法的完整攻略。 JavaScript Array toLocaleString方法 JavaScript Array toLocaleString方法用于将数组中的元素转换为本地字符串。该方法会将数组中的每个元素转换为字符串,并使用本地化的格式进行格式化。 下面是使用toLocaleS…

    JavaScript 2023年5月11日
    00
  • 用js实现轮播图效果

    实现轮播图效果的一般思路: 1.准备好轮播图所需的HTML结构:容器元素、轮播图图片、圆点等。 2.通过CSS实现轮播图的样式,包括图片的大小、位置、圆点的样式等。 3.通过JavaScript实现轮播图的功能,包括自动播放、手动切换、圆点切换等。 以下是具体的实现步骤和代码示例: 一、HTML结构 HTML结构一般包括轮播图容器元素、图片元素及圆点元素,如…

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