首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Wicket组件中删除CSS类?

如何从Wicket组件中删除CSS类?
EN

Stack Overflow用户
提问于 2012-04-13 05:40:09
回答 3查看 11.6K关注 0票数 15

动态地使用类添加到AttributeAppender代码中的组件中非常简单

代码语言:javascript
复制
component.add(new AttributeAppender("class", true, new Model<String>("foo"), " "));

或者,如果您已经将上面的内容提取到一个适当的实用程序方法或类中,那么只需这样做:

代码语言:javascript
复制
component.add(WicketUtils.cssClassAppender("foo"));

,但我如何删除CSS类?

通过完全清除class属性,您可以轻松地删除所有CSS类:

代码语言:javascript
复制
component.add(new SimpleAttributeModifier("class", ""));

如果组件有您不希望删除的其他CSS类,则不能接受...but。

Wicket1.4(但也可以随意发布针对以后版本的建议)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-13 05:45:14

我想出了一个办法:

代码语言:javascript
复制
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, "");
    }
}

然后,使用上述助手的代码如下:

代码语言:javascript
复制
component.add(new CssClassRemover("foo"))

(当然,您也可以根据需要创建匿名AttributeModifier子类,但是将逻辑放在单独的实用程序类或方法中可以清理它很多。)

编辑:一个改进的newValue()版本,它更好地处理角落案例(参见biziclop的评论)。注:使用番石榴。(欢迎您发布更简单的帖子(regex?)(版本)

代码语言:javascript
复制
@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); 
}
票数 17
EN

Stack Overflow用户

发布于 2015-05-08 13:28:41

乔尼克的回答的基础上,下面添加了负前瞻性,以忽略不同样式类中间出现的事件(并且不区分大小写)。

代码语言:javascript
复制
public class StyleClassRemover extends AttributeModifier {

    public StyleClassRemover(final String cssClass) {
        super("class", false, Model.of(cssClass));
    }

    @Override
    protected String newValue(final String currentValue, final String valueToRemove) {
        if (currentValue == null) {
            return "";
        }

        final String patternString = "(^|\\s+)" + Pattern.quote(valueToRemove) + "(?!\\S)";
        return Pattern.compile(patternString, Pattern.CASE_INSENSITIVE).matcher(currentValue).replaceAll("");
    }
}

测试输入:http://fiddle.re/ah0ca6

票数 3
EN

Stack Overflow用户

发布于 2012-04-13 14:24:57

Wicket 1.5+有org.apache.wicket.AttributeModifier#remove()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10135791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档