这是我想出的一种方法:
public class CssClassRemover extends AttributeModifier {
public CssClassRemover(String cssClass) {
super("class", false, new Model<String>(cssClass));
}
@Override
protected String newValue(String currentValue, String valueToRemove) {
// NB: naive approach; breaks with e.g. "foo foo-bar" & "foo"
return currentValue.replaceAll(valueToRemove, "");
}
}
使用上述帮助程序的代码将是:
component.add(new CssClassRemover("foo"))
(当然,您也可以根据需要创建匿名 AttributeModifier 子类,但是将逻辑放在单独的实用程序类或方法中会清理很多。)
编辑:一个改进的版本newValue()
可以更好地处理极端情况(参见 biziclop 的评论)。注意:使用番石榴。(欢迎您发布更简单的(正则表达式?)版本。)
@Override
protected String newValue(String currentValue, String valueToRemove) {
if (currentValue == null) return "";
Set<String> classes = Sets.newHashSet(Splitter.on(" ").split(currentValue));
classes.remove(valueToRemove);
return Joiner.on(" ").join(classes);
}