我有一个GXT网格,我正在应用html标签来突出显示文本&#34; def&#34;在单词&#34;定义&#34;。但不是将其作为HTML标记,而是将其视为字符串并将输出显示为<mark>def</mark>ining
。你能帮我解决这个问题吗?
private static String doHighlight(String dtoData){ //dtoData is "defining"
int dtoLength = dtoData.length();
int i = -1;
String newDtoData = null;
String finalDtoData = null;
String highlightStartTag = "<mark>";
String highlightEndTag = "</mark>";
if (dtoData != null && dtoData != "") {
i = dtoData.toLowerCase().indexOf("def", i+1);
if(i<0){
finalDtoData = dtoData;
}else{
newDtoData = highlightStartTag +dtoData.substring(0, i) + dtoData.substring(i, "def".length()) + highlightEndTag;
finalDtoData = newDtoData + dtoData.substring("def".length(), dtoLength);
i = -1;
}
}
return finalDtoData;
}
答案 0 :(得分:2)
因为要求与布局有关,所以我个人会在网格的那一列使用一个单元格。
这样的事情应该有效:
myColumn.setCell(new AbstractCell<String>() {
@Override
public void render(Context context,
String value,
SafeHtmlBuilder sb) {
if (value != null && value != "") {
int i = value.toLowerCase().indexOf("def");
if (i < 0) {
sb.append(value);
} else {
sb.appendHtmlConstant("<mark>")
.append(value.substring(0, i))
.append(value.substring(i, "def".length()))
.appendHtmlConstant("</mark>")
.append(value.substring("def".length(), value.length()));
}
}
}
});
当然,这不完整,但它应该让你知道如何解决它。
希望有所帮助。
答案 1 :(得分:1)
private static Map<Integer, String> findMatches(String searchText, String dtoValue, int rowCount) {
Map<Integer,String> matchesMap = new HashMap<Integer,String>();
if (dtoValue != null && dtoValue != "") {
i = dtoValue.toLowerCase().indexOf(searchText, i+1);
if(i>=0){
newDtoData = dtoValue.replaceAll(searchText, "<span style='background-color: yellow; !important'>"+searchText+"</span>");
matchesMap.put(rowCount, newDtoData);
i = -1;
}
}
return matchesMap;
将上面的matchesMap传递给下面的循环并在rowcount上迭代它。您可以使用列数和行数来获取单元格。获取单元格元素后,您可以设置innerHTML。
for(int rowId:matchesMap.keySet()){
if(!matchesMap.get(rowId).isEmpty()){
Element cellElement = viewComponent.getView().getCell(rowId, columnId);
if(cellElement != null){
cellElement.setInnerHTML(matchesMap.get(rowId));
}
}
}