& lt; li>不同背景颜色之间的元素切换
<li> element toggle between different background colors
我想根据类改变按钮的背景颜色。为什么在第二次点击后不回去?
var $begin1 = $(".begin1").click(function(e) {
e.preventDefault();
var buttonState = $(this).attr("class");
if (buttonState != 'pressed') {
$begin1.removeClass('pressed');
$(this).addClass('pressed');
} else {
$(this).removeClass('pressed');
$(this).addClass('unpressed');
}
});
li {
list-style-type: none;
}
.begin1.unpressed,
.begin2.unpressed {
background-color: white;
color: black;
border: 2px solid #4CAF50;
margin: 0 0 10px 0;
}
li.begin1.pressed,
li.begin2.pressed {
background: #4CAF50;
color: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<li class="begin1 unpressed">
<h2>Button</h2>
</li>
https://jsfiddle.net/nrebaL00/可以大大简化代码。从一开始就应用默认样式,就不需要.unpressed
类了。
使用.attr( 'class' )
的问题是,它将检索应用于元素的所有类作为字符串。执行像if ( 'a' === $el.attr( 'class' ) )
这样的检查将不起作用,$el
是<li class="a b c">
,因为$el.attr( 'class' )
会返回'a b c'
而不是'a'
。这就是为什么你的支票在第一次点击后就失败了。这种检查对.hasClass()
是有好处的。
<li>
不需要 e.prevendDefault()
,所以删除它。
注意:我为jQuery使用的选择器是相当通用的。如果页面上有其他不需要该功能的<li>
,您可能需要增加它的特异性。类似于向<ul>
添加一个类并将其用作jQuery选择器的一部分。即<ul class="clicky-mcclickens">
和$( '.clicky-mcclickens li' )
.
$('li').on('click', function(e) {
$(this).toggleClass('pressed');
});
li {
list-style-type: none;
background-color: white;
color: black;
border: 2px solid #4CAF50;
margin: 0 0 10px 0;
}
.pressed {
background: #4CAF50;
color: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<h2>Button 1</h2>
</li>
<li>
<h2>Button 2</h2>
</li>
</ul>
有时候你需要更多的控制,而不仅仅是在元素被点击时添加/删除一个类。在这些情况下,您可以使用.hasClass()
来检查元素是否具有有问题的类,并应用适当的操作。
你的代码比它需要的复杂得多;你可以像这样调用toggleClass()
:
var $begin1 = $(".begin1").click(function() {
$(this).toggleClass('pressed unpressed');
});
更新小提琴
注意e.preventDefault()
对于li
元素是冗余的,因为它没有默认行为来阻止。
我会使用toggleClass而不是手动添加和删除。这似乎可以工作:
var $begin1 = $(".begin1").click( function(e) {
$begin1.toggleClass('pressed');
});
代替检查元素的类的完整字符串,您可以使用hasClass
:
var $begin1 = $(".begin1").click( function(e) {
e.preventDefault();
if(!$(this).hasClass('pressed')){
$begin1.removeClass('unpressed');
$(this).addClass('pressed');
} else{
$(this).removeClass('pressed');
$(this).addClass('unpressed');
}
});
li{
list-style-type: none;
}
.begin1.unpressed,
.begin2.unpressed {
background-color: white;
color: black;
border: 2px solid #4CAF50;
margin: 0 0 10px 0;
}
li.begin1.pressed,
li.begin2.pressed{
background: #4CAF50;
color: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<li class="begin1 unpressed"><h2>Button</h2></li>
使用attr('class')
的问题是你不能确切地知道最后的字符串是什么
将js替换为:
$(document).ready(function() {
$(".begin1").click(function(){
$(this).toggleClass("pressed");
});
});
- 选择两种颜色并在两者之间选择n种颜色
- 边距和输入元素边框之间的填充颜色
- 从表列中检索日期,并根据从今天到日期之间的天数使行的颜色发生变化
- 检查类以在背景颜色之间切换
- 屏幕在两种颜色之间闪烁的速度足够快,因此人眼无法想象
- 颜色框和引导库之间的冲突
- 如何在高图表的 2 点之间制作颜色填充区域
- 在背景颜色背景图像之间分层文本
- 使用Javascript在鼠标移动时在两种颜色之间切换
- JavaScript 和 jQuery 之间的背景颜色值
- 如何确定两种HEX颜色之间的差异
- 如何以编程方式计算两种颜色之间的对比度
- Highcharts-悬停时x坐标之间的不同填充颜色
- 在两种颜色之间切换的功能
- jQuery暂停之间的动画和颜色变化
- 两个选择的rgb颜色之间的随机颜色(JavaScript)
- 颜色盒和表单样式之间的冲突
- 在three.js中材质的漫射贴图和颜色之间的相关性
- 用javascript检测颜色是否介于两种颜色之间
- 每秒钟在红色和绿色之间改变背景颜色