SWT浏览器关注下一个和上一个高亮文本



我正在用SWT浏览器小部件开发一个小型应用程序。我正在使用突出显示搜索文本单词

<a id="xyz" href=''><mark>test</mark></a>

在HTML文档中。并以这种方式替换HTML文本中的所有搜索词,这样我们就可以突出显示所有搜索词。

    htmltext.replaceAll("(?i)"+Pattern.quote(searchword), "\<a id='xyz' href=''> <mark>$0\</mark></a>

我想实现这样的功能:如果我点击下一个按钮,下一个突出显示的单词应该得到焦点,如果我点击上一个按钮上一个突出的文本应该得到焦点。如何在Eclipse RCP应用程序中使用Javascript完成Next和Previous Hit。

最好通过将JavaScript与Java代码相结合来解决此问题。这取决于你要处理什么样的HTML内容,它是有状态的(例如,不能重新加载)、有很多JS代码的动态的,还是纯静态的。在大多数情况下,最好的解决方案包括用JS编写的大部分逻辑,以及用Java将JS操作绑定到SWT GUI的最小代码。

您需要实现以下几点:

  1. 关键字搜索
  2. 切换高亮显示
  3. 将高亮显示从一个单词切换到另一个单词

1.搜索:您意识到您将无法搜索跨越许多HTML元素的单词,如W<span>o</span>rd?如果可以,那么您可以像现在一样从Java中搜索和替换。我会用id:<span id="match1">单独标记每个单词匹配,并记住总共找到了多少个匹配。

您也可以在JS端进行这样的搜索,方法是添加一个函数,该函数遍历DOM并搜索特定文本,然后用另一个DOM对象包装它。

2.切换高亮显示:最好使用JavaScript。将切换DOM元素样式的JS代码片段附加到HTML中。类似于:`

function highlight(id) {
  document.getElementById(id).className = 'highlighted'
}

您可以通过调用swtBrowser.execute("highlight('match1')")从SWT调用此JS此外,您应该实现取消突出显示的功能。

3.在元素之间切换高亮显示:这既可以在Java端完成,也可以在JS端完成。我可能会使用JS,再添加两个函数:highlightNext()highlightPrev(),它们只会用适当的id调用highlight()函数。然后在Java中,您可以制作SWT按钮,通过SWTBrowser.execute().

调用JS函数

最新更新