【问题标题】:Add two times the same class on one element [duplicate]在一个元素上添加两次相同的类[重复]
【发布时间】:2014-09-29 18:53:29
【问题描述】:

最近我正在为我的工作对一个遗留项目进行一些重构,我可能偶然发现了一些“错误”的东西。

在框架内的某个地方,自定义页面加载器从端点读取controller/action,并将它们作为两个类应用到正文中。

确实可以这样说:

$('body').removeAttr("class").addClass(controller + ' ' + action);

index 作为控制器,cars 作为动作,身体看起来像:

$('body').removeAttr("class").addClass('index cars');
<body class="index cars">

到目前为止一切都很好(不完全)。

稍后再次匹配您要执行的特定元素:

$('.index.cars')

现在如果动作和控制器名称相同,就会出现问题。 应用了这两个类,假设cars/cars 看起来像这样:

<body class="cars cars">

选择器$('.index.cars') 可以很好地配合上述内容。

现在有趣的部分是,如果您尝试使用 jQuery 1.11.1 添加类,那么这将不起作用。它不能在一个元素上添加第二个具有相同名称的类。

所以这个:

$('body').removeAttr("class").addClass('cars cars');
<body class="cars">

不起作用:-(

在谷歌和这里搜索了一下,但找不到东西。

问题是:

在一个元素上拥有 2 次相同的类是否有效?如果是,那么除了创建带有类的选择器之外,还有什么具体原因会这样做吗?

【问题讨论】:

  • 为什么不在addClass(controller + ' ' + action); 之前添加一个验证来检查名称是否相同,然后再附加它们。
  • 谢谢@emmanuel。我知道解决这个问题的方法,但我只是在徘徊......
  • 非常感谢@LcSalazar(感觉有点愚蠢):-)。所以可能是一个 jQuery 的东西......我标记为重复。

标签: javascript jquery html css class


【解决方案1】:

一个元素有多个重复的类是有效的。在此处查看 Moz 开发人员参考:https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/class

基本上,无论调用什么,它都会识别同一元素的两个实例,但会将其视为一个类。

要回答你的第二个问题,即某人使用它的原因……我个人想不出一个?

至于您上面的问题,您正在删除元素上的属性“类”,然后将其与类值一起添加回来。例如:&lt;div class="car"&gt;变成&lt;div&gt;,然后变成&lt;div class="controller action"&gt;

您可以使用.removeClass 替换.removeAttr

请看这里:http://api.jquery.com/removeclass/

希望有帮助吗?祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多