我正在使用带GWT的UiBinder。我有一个HTML面板,里面有一堆小部件和HTML元素。我需要更改父HTMLpanel内的文本以反映用户的性别(他对她的类型)。我需要更改的所有文本都在不同的div元素内(不在任何小部件内)但不是相同的div。这是一个例子
<g:HTMLPanel ui:field="parentWidget">
<div>I think he is currently in a meeting.</div>
<my:widget>stuff</my:widget>
<div>I will have him call you when he gets out</div>
</g:HTMLPanel>
我用代词进行每个div,需要更改为GWT小部件,然后在代码中逐个更改它们,但现在文本已经增长,我想要一种更简单的方法来实现它。
我试过了
parentWidget.getElement.setInnerHTML(parentWidget.getElement.getInnerHTML().replaceAll(...)
但是我觉得它没有用。
任何建议
答案 0 :(得分:1)
正如其他人所建议的那样,GWT的消息界面是继续前进的理想方式。但是如果你想使用字符串替换技术,你可以执行以下操作:
NodeList<Node> childNodes = parentWidget.getElement().getChildNodes();
for(int i=0;i<childNodes.getLength(); i++){
Node node = childNodes.getItem(i);
if(Node.ELEMENT_NODE==node.getNodeType()){
Element nodeEle = (Element)node;
//use replaceAll or replace according to the requirement
nodeEle.setInnerText(nodeEle.getInnerText().replaceAll("\\bhe\\b","she"));
}
}
这样,您可以通过仅修改文本来防止覆盖父窗口小部件中显示的元素(即仅在文本上使用replaceAll
/ replace
)。