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

时间:2014-09-26 06:20:11

标签: java javascript browser swt eclipse-rcp

我正在使用SWT Browser小部件开发一个小应用程序。我正在用

突出显示搜索文字
<a id="xyz" href=''><mark>test</mark></a>

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

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

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

1 个答案:

答案 0 :(得分:1)

通过将JavaScript与Java代码相结合,可以最好地解决这个问题。这取决于你要处理什么样的HTML内容,如果它是有状态的(例如无法重新加载),动态有很多JS代码,或者是静态的。在大多数情况下,最好的解决方案是将大部分逻辑用JS编写,只用Java编写最少的代码就可以将JS操作绑定到SWT GUI。

您需要实施以下几项内容:

  1. 关键字搜索
  2. 切换突出显示
  3. 从一个单词切换到另一个单词
  4. <强> 1。搜索:您意识到您将无法搜索跨越许多HTML元素的字词,例如W<span>o</span>rd?如果没关系那么你可以像现在一样从Java中搜索和替换。我会使用id:<span id="match1">单独标记每个单词匹配,并记住总共找到了多少匹配。

    你可以通过添加一个遍历DOM并搜索特定文本并用另一个DOM对象包装它的函数来在JS端进行搜索。

    <强> 2。切换突出显示:最好用JavaScript完成。在HTML中附加一个切换DOM元素样式的JS代码片段。就像是: `

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

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

    第3。在元素之间切换突出显示: 这可以在Java端和JS端完成。我可能会使用JS并添加另外两个函数:highlightNext()highlightPrev(),只需使用正确的id调用highlight()函数。 然后在Java中,您可以创建通过SWTBrowser.execute()调用JS函数的SWT按钮。