我正在使用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。
答案 0 :(得分:1)
通过将JavaScript与Java代码相结合,可以最好地解决这个问题。这取决于你要处理什么样的HTML内容,如果它是有状态的(例如无法重新加载),动态有很多JS代码,或者是静态的。在大多数情况下,最好的解决方案是将大部分逻辑用JS编写,只用Java编写最少的代码就可以将JS操作绑定到SWT GUI。
您需要实施以下几项内容:
<强> 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按钮。