【问题标题】:Parameterize jQuery addClass?参数化jQuery addClass?
【发布时间】:2016-02-05 17:44:47
【问题描述】:

是否可以以某种方式参数化 jQuery addClass() 方法? 比如,有一个在调用addClass() 方法时设置颜色属性的css 类?

我希望这是有道理的,因为我对 JavaScriptCSS 还很陌生。如果它很重要,我正在扩展 MediaWiki VisualEditor。该方法用于立即显示/渲染在编辑器中所做的更改。但是我找不到需要参数化的示例。

如果不可能,我很想知道该怎么做。

如果不是,也许有人可以建议如何以另一种方式实现我想要的东西?

编辑:

这是当前状态: 当我在文本中添加一些注释时,比如说一个语言注释,这被称为:

this.$element
    .addClass( 've-ce-languageAnnotation' )
    .addClass( 've-ce-bidi-isolate' )
    .prop( {
        lang: this.model.getAttribute( 'lang' ),
        dir: this.model.getAttribute( 'dir' ),
        title: this.constructor.static.getDescription( this.model )
    } );

这是ve-ce-language注解:

.ve-ce-languageAnnotation {
border-bottom: 1px dashed #ccc;
background-color: #ebf3f5;
}

这是 ve-ce-bidi-isolate:

.ve-ce-bidi-isolate {
unicode-bidi: isolate;
unicode-bidi: -moz-isolate;
unicode-bidi: -webkit-isolate;
}

我将此解释为prop() 函数设置了某种参数。所以这就是我为我的 textColor 注释尝试的:

     this.$element
    .addClass( 've-ce-textColorAnnotation' )
    .prop( {
        color: this.model.getAttribute( 'style' ),
        title: this.constructor.static.getDescription( this.model )
    } )
    ;

使用 ve-ce-TextColorAnnotation:

.ve-ce-textColorAnnotation {
    color: red;
}

这总是产生红色。当我尝试输入其他内容而不是合法颜色时,什么也没有发生。

Edit2:我想一种选择是为每种可能的颜色创建一个类,并根据参数添加正确的类?像这样:

var color = this.model.getAttribute('style');
if (color == 'blue') {
    this.$element.addClass( 'blueText' )
} else if (...

但这看起来不是一个好主意。

编辑 3:According to the top answer in this question,我想要的是不可能的 - 但我可以通过使用 this.$element.css('attr', 'value') 直接应用属性而不使用类。我想我可以用它来满足我的需要。

【问题讨论】:

  • 你能告诉我们你到目前为止尝试了什么吗?
  • 你的意思是在调用 addClass 时总是添加所说的类?
  • 比如,有一个带有 color 属性的 css 类,该属性是在调用 addClass() 方法时设置的? 这是addClass().removeClass() 的主要目标,和.toggleClass()。只需将一个类当作一个状态(即开、关、高、低、显示、隐藏等...)
  • @Gerwin 我用更多信息编辑了我的问题。 GMchris 我想在调用 addClass 时总是添加颜色,但颜色可能会有所不同,所以我想要 setColor(String color) 之类的东西。如果这样的事情是可能的。
  • 我有 5 年以上的 CSS 和 JS 经验,但我完全不明白这个问题,您能否考虑编辑它以获得更好的解释?也许添加一个伪示例,或者其他语言的示例

标签: javascript jquery html css


【解决方案1】:

看来您只是想设置一种颜色,而不是添加一个类。 HTML 中的类可用于样式化或 DOM 导航,但在您的情况下,您只想对元素应用不同的颜色。您不需要为此使用类,尤其是在颜色是动态的情况下。

你要做的是调用jquery的.css()方法。它可以与单个参数一起使用,如下所示:

element.css({
  'color': 'black',
  'height': '100px'
});

或多个,如果您只想编辑单个属性:

element.css('color', 'black');

不使用 jQuery,你也可以这样做:

element.style.color = 'black';

【讨论】:

  • 应该是('color', 'black')
  • 没错。修好了。
【解决方案2】:

你可以用简单的方式做什么。假设您有一个下拉菜单,您可以从中选择颜色。在选项的 value 属性上,你有 blueText 代表蓝色,redText 代表红色等等你想要的每种颜色。

然后在代码上你可以得到值。您可以查看here 如何获取值,然后您可以在 CSS 中找到 redText、blueText 等类。 当用户单击该选项时,您会捕获事件并执行以下简单的代码:

this.$element.addClass( 'text that you got from value attribute' )

您当然可以在添加之前删除类。

【讨论】:

  • 这需要我为每种颜色设置一个类,对吧?这听起来不像是好风格。是否可以在不使用类的情况下应用一个属性?我已经阅读了有关 jQuery .attr() 方法的一些内容,但无法使其工作(即使没有参数)。
  • 您只需要更改文本的颜色吗?那么是的,您可以使用类似 yourItem.style.color = "your new class" 的东西。或者您可以按照您所说的尝试使用 attr ;)
猜你喜欢
  • 1970-01-01
  • 2011-12-29
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 2012-02-05
  • 1970-01-01
相关资源
最近更新 更多