我正在开发一个小型应用程序与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.搜索:您意识到您将无法搜索跨越多个HTML元素的单词,例如W< span> o< / span> rd?如果没关系,那么您可以像现在一样从Java搜索和替换.我会单独标记每个字符匹配的id:< span id =“match1”>并记得总共找到了几场比赛.
您可能也可以在JS端进行这样的搜索,也可以通过添加一个通过DOM进行迭代并搜索特定文本并将其与另一个DOM对象进行包装的函数.
2.切换突出显示:最好在JavaScript中完成.附加到您的HTML一个JS代码片段,切换DOM元素样式.就像是:
`
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()使SWT按钮调用JS函数.