如何解决使用 Java 突出显示 Html 中的文本
我正在尝试在 Java 中的 HTML 字符串中添加突出显示来搜索单词。
我正在使用 JSoup 解析 HTML 并遍历每个文本节点以查找搜索词,然后在该词周围添加 mark 标记。
当我按顺序解析每个节点时,有一种情况被遗漏了。
如果文本被标签拆分,那么当前逻辑肯定找不到该单词。
示例:
<div><span class="A">search sear<span class="B">ch</span></span></div>
如果搜索词是“搜索”,那么第一个会突出显示,但第二个会漏掉。
有没有一种方法可以突出显示 sear<span class="B">ch</span>
而无需对 HTML 结构进行任何重大更改?
代码逻辑:
private static void doHighlighting(Node body,List<String> searchWordList,String highlightRgb[]) {
String startTag = "<mark style=\"background-color:rgb("+ highlightRgb[0] + "," + highlightRgb[1] + "," + highlightRgb[2] + ")\">";
String endTag = "</mark>";
for (Node node : body.childNodes()) {
if (node instanceof TextNode && !((TextNode) node).isBlank()) {
String nodeText = ((TextNode) node).text();
Map<Integer,Integer> indexMap = new HashMap<Integer,Integer>();
for (String searchWord : searchWordList){
indexMap = StringUtil.patternIndexSearch(searchWord.toLowerCase(),nodeText.toLowerCase(),indexMap);
}
//indexMap stores startPosition and endPosition of the searchwords in a String
//Then adds mark tag here and updates the html
} else {
doHighlighting(node,searchWordList,highlightRgb);
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。