Abh*_*hit 10 javascript java browser swt eclipse-rcp
我正在使用SWT Browser小部件开发一个小应用程序.我正在突出显示搜索文字
<a id="xyz" href=''><mark>test</mark></a>
Run Code Online (Sandbox Code Playgroud)
在HTML文档中.并以这种方式替换HTML Text中的所有搜索词,以便我们突出显示所有搜索词.
htmltext.replaceAll("(?i)"+Pattern.quote(searchword), "\\<a id='xyz' href=''> <mark>$0\\</mark></a>
Run Code Online (Sandbox Code Playgroud)
我想实现功能,如果我点击下一个按钮,下一个突出显示的单词应该得到焦点,如果我点击上一个按钮,前一个突出显示的文本应该得到焦点.如何在Eclipse RCP应用程序中使用Javascript完成Next和Previous Hit.
小智 1
最好的解决方法是将 JavaScript 与 Java 代码结合起来。这取决于您要处理哪种 HTML 内容,它是有状态的(例如无法重新加载)、包含大量 JS 代码的动态内容还是纯静态内容。在大多数情况下,最好的解决方案是用 JS 编写大部分逻辑,只用 Java 编写最少的代码来将 JS 操作绑定到 SWT GUI。
您需要实施几件事:
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'
}
Run Code Online (Sandbox Code Playgroud)
您将能够通过调用swtBrowser.execute("highlight('match1')")
进一步从 SWT 调用此 JS,您应该实现取消突出显示的函数。
3. 在元素之间切换突出显示:这可以在 Java 端和 JS 端完成。我可能会使用 JS 并添加另外两个函数:highlightNext()这highlightPrev()只会调用highlight()具有正确 ID 的函数。然后在 Java 中,您可以制作通过 SWTBrowser.execute() 调用 JS 函数的 SWT 按钮。