JQuery 更改所选列表项的背景颜色
JQuery to change background color of selected list item
我有一个无序列表,我想在选择该项目时更改每个项目的背景颜色(列表中的项目是 link 标签)这是我的 JQuery 代码到目前为止。
$(".cat").click(function(){
if ($('.cat').is(":selected")) {
$(this).css("background-color", "#1796cf");
} else {
$(this).css("background-color", "#333333");
}
});
HTML代码如下:
<ul class="categories">
<li class="cat"><a href="#">K-12</a></li>
<li class="cat"><a href="#">Higher Education</a></li>
<li class="cat"><a href="#">Healthcare</a></li>
<li class="cat"><a href="#">Corporate</a></li>
<li class="cat"><a href="#">Recreation</a></li>
<li class="cat"><a href="#">Community</a></li>
<li class="cat" style="border:none"><a href="#">Faith Based</a></li>
</ul>
.cat
是我无序列表中每个项目的 class。问题是它总是 运行 我的 else 语句。当 link 是当时选择的那个时,我应该使用什么选择器来引用?我尝试使用 focuson() 而不是 click() 但是对于页面上的其他元素,这将无法按照我想要的方式工作。
方法 1 - 最小变化
$(".cat").click(function(){
if ($(this).css("background-color") === "#333333") {
$(this).css("background-color", "#1796cf");
} else {
$(this).css("background-color", "#333333");
}
});
说明 - "li" 元素未选择 属性,因此您的代码无法正常工作。您可以简单地检查背景颜色 属性 并切换它。
方法 2 - 有更多变化但更清晰的代码
您还可以简化代码。
将您的脚本更新为
$('.cat').on('click', function(){
$(this).toggleClass('background_selected');
});
将此添加到您的 css
.cat {
background-color : #333333;
}
.background_selected {
background-color : #1796cf;
}
通过以上,你将拥有#333333背景的所有li。单击事件将覆盖背景颜色 属性 的另一个 class 切换为 #1796cf。您唯一需要确定的是 .background_selected 样式应该在 css 文件中的 .cat 样式之后。
我希望两种方法都清楚。
新要求 - Select 一次只有一个元素。
$('.cat').on('click', function(){
$('.cat').removeClass('background_selected');
$(this).addClass('background_selected');
});
请注意,如果您单击所选元素,这将不会执行任何操作。但是,如果您也需要在所选元素上切换 class 并且我想在单击时取消选择它,那么您将需要以下代码。
$('.cat').on('click', function(){
var isAlreadySelected = $(this).hasClass('background_selected');
$('.cat').removeClass('background_selected');
if(!isAlreadySelected) {
$(this).addClass('background_selected');
}
});
我有一个无序列表,我想在选择该项目时更改每个项目的背景颜色(列表中的项目是 link 标签)这是我的 JQuery 代码到目前为止。
$(".cat").click(function(){
if ($('.cat').is(":selected")) {
$(this).css("background-color", "#1796cf");
} else {
$(this).css("background-color", "#333333");
}
});
HTML代码如下:
<ul class="categories">
<li class="cat"><a href="#">K-12</a></li>
<li class="cat"><a href="#">Higher Education</a></li>
<li class="cat"><a href="#">Healthcare</a></li>
<li class="cat"><a href="#">Corporate</a></li>
<li class="cat"><a href="#">Recreation</a></li>
<li class="cat"><a href="#">Community</a></li>
<li class="cat" style="border:none"><a href="#">Faith Based</a></li>
</ul>
.cat
是我无序列表中每个项目的 class。问题是它总是 运行 我的 else 语句。当 link 是当时选择的那个时,我应该使用什么选择器来引用?我尝试使用 focuson() 而不是 click() 但是对于页面上的其他元素,这将无法按照我想要的方式工作。
方法 1 - 最小变化
$(".cat").click(function(){
if ($(this).css("background-color") === "#333333") {
$(this).css("background-color", "#1796cf");
} else {
$(this).css("background-color", "#333333");
}
});
说明 - "li" 元素未选择 属性,因此您的代码无法正常工作。您可以简单地检查背景颜色 属性 并切换它。
方法 2 - 有更多变化但更清晰的代码
您还可以简化代码。
将您的脚本更新为
$('.cat').on('click', function(){
$(this).toggleClass('background_selected');
});
将此添加到您的 css
.cat {
background-color : #333333;
}
.background_selected {
background-color : #1796cf;
}
通过以上,你将拥有#333333背景的所有li。单击事件将覆盖背景颜色 属性 的另一个 class 切换为 #1796cf。您唯一需要确定的是 .background_selected 样式应该在 css 文件中的 .cat 样式之后。
我希望两种方法都清楚。
新要求 - Select 一次只有一个元素。
$('.cat').on('click', function(){
$('.cat').removeClass('background_selected');
$(this).addClass('background_selected');
});
请注意,如果您单击所选元素,这将不会执行任何操作。但是,如果您也需要在所选元素上切换 class 并且我想在单击时取消选择它,那么您将需要以下代码。
$('.cat').on('click', function(){
var isAlreadySelected = $(this).hasClass('background_selected');
$('.cat').removeClass('background_selected');
if(!isAlreadySelected) {
$(this).addClass('background_selected');
}
});