>웹 프론트엔드 >JS 튜토리얼 >JavaScript를 사용하여 검색된 문자열 결과를 강조 표시하는 방법은 무엇입니까?

JavaScript를 사용하여 검색된 문자열 결과를 강조 표시하는 방법은 무엇입니까?

PHPz
PHPz앞으로
2023-09-01 12:49:02874검색

如何使用 JavaScript 突出显示搜索到的字符串结果?

在大量文本中搜索特定内容是 Web 应用程序中的一项常见任务。然而,仅显示搜索结果而没有任何视觉指示可能会使用户难以识别和关注相关信息。这就是需要突出显示搜索字符串的地方。通过动态突出显示文本的匹配部分,我们可以改善用户体验,让用户更容易找到所需的内容。

在这篇博文中,我们将探索使用 JavaScript 突出显示搜索字符串的不同方法。我们将介绍从操作 HTML 内容到利用正则表达式和 CSS 样式的各种技术。无论您是为网站构建搜索功能还是开发基于文本的应用程序,这些方法都将使您能够增强搜索结果的可见性并提供更直观的用户界面。

方法 1 - 操作内部 HTML

突出显示搜索字符串的一种直接方法是操作包含文本的元素的内部 HTML。此方法涉及查找文本中出现的搜索字符串,并用 HTML 标记将其包裹起来,或应用内联样式以直观地突出显示它们。

要实现此方法,请按照以下步骤操作 -

  • 检索执行搜索的目标元素的内容。

  • 使用replace()方法或正则表达式查找搜索字符串并将其替换为突出显示的版本。

  • 用 HTML 标签包裹匹配的字符串或应用内联样式来突出显示它。

  • 将修改后的内容设置回目标元素的内部 HTML。

让我们用一个例子来说明这一点。假设我们有一个类名为“content”的 HTML 元素,并且我们想要突出显示其中出现的搜索字符串。我们可以使用以下 JavaScript 代码 -

// Get the target element
const contentElement = document.querySelector('.content');

// Retrieve the content
const content = contentElement.innerHTML;

// Replace the search string with the highlighted version
const highlightedContent = content.replace(/search-string/gi, '$&');

// Set the modified content back to the element
contentElement.innerHTML = highlightedContent;

在上面的代码中,我们使用带有正则表达式的replace()方法来查找所有出现的搜索字符串并将其替换为突出显示的版本。替换字符串中的 $& 代表匹配的字符串本身。我们用 元素包装它,并应用“highlight”类来设置样式。

示例

示例如下 -

<!DOCTYPE html>
<html>
<head>
   <style>
      .highlight {
         background-color: yellow;
         font-weight: bold;
      }
   </style>
</head>
<body>
   <div class="content">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
      Aliquam cursus maximus eros, non consequat nulla vulputate id. 
      Sed porttitor quam a felis viverra lacinia. 
      Vestibulum vestibulum massa at orci ultrices, in maximus tellus aliquam.
   </div>
   <form>
      <input type="text" id="searchInput" placeholder="Search...">
      <button type="button" onclick="highlightText()">Search</button>
   </form>
   <script>
      function highlightText() {
         const searchInput = document.getElementById('searchInput');
         const searchValue = searchInput.value.trim();
         const contentElement = document.querySelector('.content');
   
         if (searchValue !== '') {
         const content = contentElement.innerHTML;
         const highlightedContent = content.replace(
            new RegExp(searchValue, 'gi'),
            '<span class="highlight">$&</span>'
         );
         contentElement.innerHTML = highlightedContent;
         } else {
            contentElement.innerHTML = contentElement.textContent;
         }
      }
   </script>
</body>
</html>

在此示例中,我们有一个 HTML 文档,其内容 div 包含一些示例文本。我们还有一个供用户输入搜索字符串的输入字段和一个搜索按钮。当用户点击搜索按钮时,就会触发highlightText()函数。

在highlightText()函数中,我们从输入字段中检索搜索字符串并修剪任何前导或尾随空格。如果搜索字符串不为空,我们将使用其内部 HTML 检索 contentElement 的内容。然后,我们使用 Replace() 方法和正则表达式将所有出现的搜索字符串(不区分大小写)替换为突出显示的版本。匹配的字符串 ($&) 包装在具有“highlight”类的 元素中。

如果搜索字符串为空,我们通过将内部 HTML 设置为 contentElement 的文本内容来恢复原始内容。

方法二:使用CSS类进行高亮

在此方法中,我们将利用 CSS 类来突出显示搜索到的字符串,而不是操作内部 HTML。实现方法如下。

示例

<!DOCTYPE html>
<html>
<head>
   <style>
      .highlight {
         background-color: yellow;
         font-weight: bold;
      }
   </style>
</head>
<body>
   <div class="content">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
      Aliquam cursus maximus eros, non consequat nulla vulputate id. 
      Sed porttitor quam a felis viverra lacinia. 
      Vestibulum vestibulum massa at orci ultrices, in maximus tellus aliquam.
   </div>

   <form>
      <input type="text" id="searchInput" placeholder="Search...">
      <button type="button" onclick="highlightText()">Search</button>
   </form>

   <script>
      function highlightText() {
         const searchInput = document.getElementById('searchInput');
         const searchValue = searchInput.value.trim();
         const contentElement = document.querySelector('.content');
   
         if (searchValue !== '') {
            const content = contentElement.textContent;
            const regex = new RegExp(searchValue, 'gi');
            const highlightedContent = content.replace(
               regex,
               (match) => `<span class="highlight">${match}</span>`
            );
            contentElement.innerHTML = highlightedContent;
          } else {
             contentElement.innerHTML = contentElement.textContent;
          }
       }
   </script>
</body>
</html>

在此示例中,我们定义了一个名为“highlight”的 CSS 类,它为突出显示的文本应用所需的样式。在highlightText()函数中,我们检索搜索字符串,修剪它,并使用其文本内容检索contentElement的内容。然后,我们使用搜索字符串和标志“gi”(全局且不区分大小写)创建正则表达式。

接下来,我们对内容字符串使用 Replace() 方法,将所有出现的搜索字符串替换为突出显示的版本。我们不使用字符串替换,而是使用回调函数,将匹配的字符串包装在具有“highlight”类的 元素中。

最后,我们将 contentElement 的内部 HTML 设置为突出显示的内容。如果搜索字符串为空,我们通过将内部 HTML 设置为文本内容来恢复原始内容。

方法三:使用正则表达式

在此方法中,我们将利用正则表达式的强大功能来动态突出显示搜索到的字符串。正则表达式提供了一种灵活而强大的方法来匹配字符串中的模式。以下是我们如何使用正则表达式突出显示搜索到的字符串

示例
<!DOCTYPE html>
<html>
<head>
   <style>
      .highlight {
         background-color: yellow;
         font-weight: bold;
      }
   </style>
</head>
<body>
   <div id="content">
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
      Aliquam cursus maximus eros, non consequat nulla vulputate id. 
      Sed porttitor quam a felis viverra lacinia. 
      Vestibulum vestibulum massa at orci ultrices, in maximus tellus aliquam.
   </div>   
   <form>
      <input type="text" id="searchInput" placeholder="Search...">
      <button type="button" onclick="highlightText()">Search</button>
   </form>   
   <script>
      function highlightText() {
         const searchInput = document.getElementById('searchInput');
         const searchValue = searchInput.value.trim();
         const contentElement = document.getElementById('content');
   
         if (searchValue !== '') {
         const content = contentElement.innerHTML;
         const regex = new RegExp(`(${searchValue})`, 'gi');
         const highlightedContent = content.replace(
            regex,
            '<span class="highlight">$1</span>'
         );
         contentElement.innerHTML = highlightedContent;
         } else {
            contentElement.innerHTML = contentElement.textContent;
         }
      }
   </script>
</body>
</html>

在此示例中,我们使用 RegExp 构造函数定义正则表达式,传递搜索值和标志“gi”(全局且不区分大小写)。我们将搜索值括在括号中以将其捕获为一个组。

highlightText() 함수 내에서 검색 문자열을 검색하고 다듬은 다음 내부 HTML을 사용하여 contentElement의 콘텐츠를 검색합니다. 그런 다음 콘텐츠 문자열에 대해 바꾸기() 메서드를 사용하여 "highlight" 클래스가 있는 요소에서 일치하는 검색 값을 래핑하는 대체 문자열과 정규식을 제공합니다.

방법 비교

이제 소개해드린 방법들을 비교해 볼까요 -

방법 1: 내부 HTML 조작

  • Performance 이 방법은 중소 규모의 텍스트에 매우 효과적이지만 문자열 조작 작업으로 인해 큰 텍스트의 경우 속도가 느려질 수 있습니다.

  • 구현하기 쉬움 JavaScript에 내장된 문자열 함수를 사용하여 비교적 쉽게 구현할 수 있습니다.

  • Flexibility 하이라이트 스타일을 사용자 정의하고 대소문자 구분을 처리하는 유연성을 제공합니다.

  • 브라우저 호환성이 방법은 최신 브라우저에서 널리 지원됩니다.

방법 2: 강조 표시에 CSS 클래스 사용

  • 성능 이 방법은 특히 DOM 조작 오버헤드로 인해 큰 텍스트나 빈번한 검색 작업을 처리할 때 다른 방법에 비해 속도가 느릴 수 있습니다.

  • 구현하기 쉬움 DOM 조작에 대한 충분한 이해가 필요하며 더 복잡한 코드가 포함될 수 있습니다.

  • Flexibility 하이라이트 스타일을 사용자 정의하고 대소문자 구분을 처리하는 유연성을 제공합니다.

  • 브라우저 호환성최신 브라우저는 이 방법을 지원하지만 구현에 따라 약간 다르게 동작할 수 있습니다.

방법 3: 정규식 사용

  • Performance 정규 표현식은 많은 양의 데이터에서도 매우 효율적으로 텍스트를 검색하고 강조 표시할 수 있습니다.

  • 구현하기 쉬움 정규식을 구현하려면 구문에 대한 깊은 이해가 필요하며 이는 초보자에게 더 어려울 수 있습니다.

  • Flexibility정규식은 강력한 패턴 일치 기능을 제공하여 고급 검색 및 강조 옵션을 허용합니다.

  • 브라우저 호환성 최신 브라우저는 정규식을 광범위하게 지원하지만 일부 이전 버전에서는 정규식 지원이 제한되거나 변경될 수 있습니다.

결론

이 기사에서는 JavaScript를 사용하여 검색 문자열을 강조 표시하는 다양한 방법을 살펴봅니다. 각 접근 방식에는 고유한 장점과 고려 사항이 있으므로 성능, 구현 용이성, 유연성 및 브라우저 호환성과 같은 요소를 기반으로 평가하는 것이 중요합니다.

이러한 방법을 이해하면 웹 애플리케이션의 검색 기능을 향상하고 보다 직관적인 사용자 경험을 제공할 수 있습니다.

위 내용은 JavaScript를 사용하여 검색된 문자열 결과를 강조 표시하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제