【问题标题】:How do web browsers implement a text search?Web 浏览器如何实现文本搜索?
【发布时间】:2011-07-22 22:43:25
【问题描述】:

我想构建一个包含 HTML Web 控件的应用程序,并启用在 html 区域中搜索和突出显示多个短语,就像它在当今的 Web 浏览器中实现的那样。 主要思想是让搜索忽略html特殊标签,只参考真实文本(内部html)。 我知道解决方案将包括编辑 DOM,但我不确定如何实现。 我在网上搜索了很多,我也看了Zavael的帖子,但不幸的是我找不到任何合适的答案。任何答案、示例或方向将不胜感激。

【问题讨论】:

  • 或许 Lucene 有这些能力。
  • @robert 我认为 OP 指的是在 Google Chrome 中复制 CTRL+F 功能。这是一个不清楚的问题。
  • Rodrigo,它将是 WPF 应用程序,在内部我将使用基于 Chromium 的“真正的 WPF”网络浏览器。
  • 杰夫,你是对的。感谢您的澄清。我想自己实现“Ctrl+F”功能,就像在 Chrome 中实现的那样。
  • 过去几年发生了很多变化。如果有人会到这里寻找更新的答案,这里描述了通过 url 搜索文本片段的新方法:web.dev/text-fragments 和 stackoverflow 上的相关问题:stackoverflow.com/questions/62989058/… 基本上你在 #:~:text= web.dev/text-fragments/…

标签: html dom browser full-text-search


【解决方案1】:

如果您指的是页面内 HTML 内容的内联搜索:首先我想说这可能不是一个好主意。您不应该取代浏览器的本机功能。让用户按照他们习惯的方式做事。使不同网站的体验保持一致。

但是,如果您出于某些利基目的需要它,我认为这不会那么难。

jQuery 可以实现它。只是一个非常艰难的开始:

//As you type in the search box...
$("#search_box").change(function() {
    //...you search the searchable area (maybe use some regex here)
    $("#search_area").html();
});

编辑:提问者问我是否可以详细说明代码。

//As you type in the search box...
$("#search_box").change(function() {
    //This part of the code is called when the contents of the search box changes

    //This is the contents of the searchable area:
    $("#search_area").html();

    //This is the contents of the search box:
    $(this).val();

    //So you could perform a function here, like replacing the occurences of the
    //search text with a span (you could use CSS to highlight the span with a
    //background colour:

    var html_contents = $("#search_area").html();
    var search_tem = $(this).val();

    $("#search_area").html(html_contents.replace(search_term, '<span class="highlight">'+search_term+'</span>'));
});

请注意,在上面的示例中,Javascript 的“替换”功能只会替换第一次出现。您需要在第一个参数中使用正则表达式来替换所有。但是我不想为你写所有的代码;)

【讨论】:

  • 谢谢克里斯。由于我对 jQuery 还不熟悉,您能详细说明一下吗?我将澄清我的问题-我正在尝试构建一种机制,该机制将类似于浏览器中的搜索控件,但将以自己的方式实现它,或者将向后使用现有的 API。因此,当用户在我的应用程序中执行搜索时,我将能够重新渲染 DOM 并突出显示一些符合其搜索条件的适用结果。 jQuery可以处理吗?
  • 是的,jQuery 可以处理它。正如我在回答中所展示的那样:随着搜索框的变化(即有人键入),您可以执行代码(您的搜索机制)。我将通过编辑上面的答案来详细说明。
猜你喜欢
  • 2011-04-12
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 2011-02-15
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
相关资源
最近更新 更多