jquery中的addClass不像我想的那样工作
addClass in jquery doesn't work as I want
我有一个代码,添加一个类(.class2
)使用jQuery。类被应用,但是类的一些样式不起作用:
$('.item1').addClass('class2');
.item1 {
font-size: 40px;
text-align: center;
height: 60px;
background-color: rgba(0, 0, 0, 0.5);
border-radius: 0px 0px;
text-decoration: none;
color: white;
margin: -10px 0px;
-webkit-transition: background-color 0.4s;
-moz-transition: background-color 0.4s;
transition: background-color 0.4s;
}
.item1:hover {
background-color: rgba(0, 0, 0, 0.7);
}
.class2 {
background-color: rgba(0, 0, 0, .85);
border: 1px solid black;
cursor: default;
/* background-color and border aren't applied */
}
问题不在于jQuery。问题出在你的CSS规则上。
<标题>浏览器总是会应用更具体的规则,例如:
HTML:<div id="my-div">
<ul class="my-list">
<li class="my-item">
</ul>
</div>
CSS: #my-div > ul > li.my-item {
background-color: none;
}
.my-item {
background-color: red
}
浏览器将检查哪个规则更具体,在这种情况下,第一个显然更具体。
如果你想重写这个规则,你必须写一个至少具有相同专用性的规则(检查这个专用性计算器)。
如果规则具有完全相同的特异性,则最后一个规则将被应用。
<标题> 解决方案使用你的浏览器开发工具来检查你的元素上应用了什么规则,然后编写一个至少具有相同特异性的规则。
没有一个精确的解决方案,因为整个页面都应该分析。
为什么不重要?
首先让我们了解!important
是如何工作的。重要将使你的规则具有最高的专一性,就像"无限"专一性。
因此该规则只能为该规则之后的规则重写,也带有!important.
好了,这就解决了我的问题,对吧?
虽然这解决了你现在的问题,这种做法是不好的,并会给你一个非常难以维护的CSS。
如果你在所有事情上都使用它,你只是杀死了CSS
的C
(层叠样式表),你将只需要依赖规则顺序,有时你将无法编写你想要的规则。
每个开始使用CSS的人都认为Cascade是一个无聊的东西,在所有东西上使用!important是好的,但事实并非如此。你迟早会意识到的。
标题>标题>因为.item1
已经有一个background-color
,并且覆盖了新的.class2
类添加的新的background-color
,所以你可以尝试使你的规则更具体,如:
.item1.class2 {
...
background-color: rgba(0, 0, 0, .85);
}
你的代码是为我工作(见下文)。如果您的样式被其他规则覆盖,请检查您的开发控制台。在这种情况下,使用更高规格的,例如.item1.class2
来覆盖已经设置的background-color。
!important
不是一个解决方案,但最好的变通(这是不好的做法)。试着组织你的规则,使之有适当的顺序。
// JS with jQuery
$('.item1').addClass('class2');
.item1 {
font-size: 40px;
text-align: center;
height: 60px;
background-color: rgba(0, 0, 0, 0.5);
border-radius: 0px 0px;
text-decoration: none;
color: white;
margin: -10px 0px;
-webkit-transition: background-color 0.4s;
-moz-transition: background-color 0.4s;
transition: background-color 0.4s;
}
.item1:hover {
background-color: rgba(0, 0, 0, 0.7);
}
.item1.class2 {
background-color: rgba(0, 0, 0, .85);
border: 1px solid black;
cursor: default;
/* background-color and border aren't applied */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="item1"></div>
如果你加载jquery库,仍然不能工作。您可以在样式中添加!important,以便可以覆盖样式,下面是class2的代码示例。
.class2 {
background-color: rgba(0, 0, 0, .85) !important;
border: 1px solid black !important;
cursor: default !important;
/* background-color and border aren't applied */
}
javascript jquery - 为什么这在IE中的工作方式与在Firefox中不同
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 更改智能表中的页面将停止JQuery函数的工作
- AngularJs中的自动完成功能无法正常工作
- JavaScript中的这个call()-方法是如何工作的
- DIV怎么能像Javascript中的另一个元素一样工作呢
- 如何在批准露天共享中工作流的审核步骤之前添加确认对话框
- angular2中的全局服务不工作
- 为什么当async标志设置为false时,xmlhttprequest中的代码可以工作,而当它设置为true时却不能工作
- javascript中的闭包对我来说工作方式不同
- 角度指令中的模糊无法正常工作
- 如何使Javascript中的CSS正常工作
- HTML文件中的智能Javascript建议在Visual Studio代码更新后没有日志程序工作
- for循环在node.js中的工作方式
- async.parallel中的回调是如何工作的(它来自哪里?)
- HTML5视频无法在chrome上工作,在服务器上托管后的IE,mov文件中的视频(quicktime格式)
- $(document)中的多个javascript函数.ready不工作
- 我需要把jsFiddle的脚本放到工作中
- ajax代码工作时,使用javascript禁用html中的链接
- 退出工作中的对象方法