【发布时间】: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