使用 removeClass 将图像 src 改回原始图像
Changing image src back to the original image using removeClass
我为我的 bxSlider 制作了自定义寻呼机。我想把原来的灰色img
变成点击时的彩色图像,得到class"green"。虽然点击的传呼机有 class "green" 和彩色图像,但我希望其他传呼机保持原始灰色图像。
我到达了可以将原来的灰色 img
替换为绿色的部分,并删除了兄弟姐妹的 class "green",但是,即使 class "green" 从兄弟姐妹中移除,它仍然保持彩色 img
而不是回到原来的灰色,好像 removeClass("green")
不起作用。
HTML:
<ul id="slidePager">
<li class="col-md-2 b-conts1">
<a href="#" data-slide-index="0">
<img src="img/benefit-lowcost-g.png" class="b-cost" alt="low cost icon" >
</a>
</li>
<li class="col-md-2 b-conts2">
<a href="#" data-slide-index="1">
<img src="img/benefit-logistic-g.png" class="b-logistic" alt="logistics icon" >
</a>
</li>
</ul>
jQuery:
$(function(e){
$('.b-conts1').on('click', function(e){
e.preventDefault();
$(this).addClass('green').siblings().removeClass('green');
if($(this).hasClass('green')){
$('.b-cost').attr('src','/img/benefit-lowcost-c.png');
} else {
$('.b-cost').attr('src','/img/benefit-lowcost-g.png');
};
});
$('.b-conts2').on('click', function(e){
e.preventDefault();
$(this).addClass('green').siblings().removeClass('green');
if($(this).hasClass('green')){
$('.b-logistic').attr('src','/img/benefit-logistic-c.png');
} else {
$('.b-logistic').attr('src','/img/benefit-logistic-g.png');
};
});
});
正如 UncaughtTypeError 指出的那样,一旦您将绿色 class 贴上,检查它是否存在就没有意义了。相反,切换您想要的图像——如果您同时更改成本图像和物流图像中的图像,那么您只需在每种情况下都设置它们。
$(function(e) {
$('.b-conts1').on('click', function(e) {
e.preventDefault();
$(this).addClass('green').siblings().removeClass('green');
// Remove the if bit here -- instead, simply set the images
// for BOTH cost and logistic. Same below.
$('.b-cost').attr('src', '/img/benefit-lowcost-c.png');
$('.b-logistic').attr('src', '/img/benefit-logistic-g.png');
});
$('.b-conts2').on('click', function(e) {
e.preventDefault();
$(this).addClass('green').siblings().removeClass('green');
$('.b-cost').attr('src', '/img/benefit-lowcost-c.png');
$('.b-logistic').attr('src', '/img/benefit-logistic-g.png');
});
});
ul {
width: 200px;
}
li {
background-color: #ccc;
}
.green {
background-color: #9c9;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="slidePager">
<li class="col-md-2 b-conts1">
<a href="#" data-slide-index="0">
<img src="img/benefit-lowcost-g.png" class="b-cost" alt="low cost icon">
</a>
</li>
<li class="col-md-2 b-conts2">
<a href="#" data-slide-index="1">
<img src="img/benefit-logistic-g.png" class="b-logistic" alt="logistics icon">
</a>
</li>
</ul>
您可以这样修改您的代码:
通过这种方式,您只需修改图像 src(s),因此无需使用所有图像的 src(s) 填充 js 文件,也无需从元素中单击 add/remove
.green
class 和将 desire src 设置为图像元素,并检查 siblings()
。从单击的元素中删除 .green
将执行相同但相反的操作。
jQuery:
$(function(e){
$("li[class*='b-conts']").on('click', function(e){//[class^="b-conts"]
e.preventDefault();
if($(this).hasClass('green')){
$(this).removeClass('green');
var source = $(this).find('img').attr('src');
source = source.slice(0,-5) + 'g.png';
$(this).find('img').attr('src', source);
} else {
$(this).addClass('green');
$(this).siblings().each(function(){
if($(this).hasClass('green')){
$(this).removeClass('green');
var source = $(this).find('img').attr('src');
source = source.slice(0,-5) + 'g.png';
$(this).find('img').attr('src', source);
}
});
var source = $(this).find('img').attr('src');
source = source.slice(0,-5) + 'c.png';
$(this).find('img').attr('src', source);
}
});
});
我为我的 bxSlider 制作了自定义寻呼机。我想把原来的灰色img
变成点击时的彩色图像,得到class"green"。虽然点击的传呼机有 class "green" 和彩色图像,但我希望其他传呼机保持原始灰色图像。
我到达了可以将原来的灰色 img
替换为绿色的部分,并删除了兄弟姐妹的 class "green",但是,即使 class "green" 从兄弟姐妹中移除,它仍然保持彩色 img
而不是回到原来的灰色,好像 removeClass("green")
不起作用。
HTML:
<ul id="slidePager">
<li class="col-md-2 b-conts1">
<a href="#" data-slide-index="0">
<img src="img/benefit-lowcost-g.png" class="b-cost" alt="low cost icon" >
</a>
</li>
<li class="col-md-2 b-conts2">
<a href="#" data-slide-index="1">
<img src="img/benefit-logistic-g.png" class="b-logistic" alt="logistics icon" >
</a>
</li>
</ul>
jQuery:
$(function(e){
$('.b-conts1').on('click', function(e){
e.preventDefault();
$(this).addClass('green').siblings().removeClass('green');
if($(this).hasClass('green')){
$('.b-cost').attr('src','/img/benefit-lowcost-c.png');
} else {
$('.b-cost').attr('src','/img/benefit-lowcost-g.png');
};
});
$('.b-conts2').on('click', function(e){
e.preventDefault();
$(this).addClass('green').siblings().removeClass('green');
if($(this).hasClass('green')){
$('.b-logistic').attr('src','/img/benefit-logistic-c.png');
} else {
$('.b-logistic').attr('src','/img/benefit-logistic-g.png');
};
});
});
正如 UncaughtTypeError 指出的那样,一旦您将绿色 class 贴上,检查它是否存在就没有意义了。相反,切换您想要的图像——如果您同时更改成本图像和物流图像中的图像,那么您只需在每种情况下都设置它们。
$(function(e) {
$('.b-conts1').on('click', function(e) {
e.preventDefault();
$(this).addClass('green').siblings().removeClass('green');
// Remove the if bit here -- instead, simply set the images
// for BOTH cost and logistic. Same below.
$('.b-cost').attr('src', '/img/benefit-lowcost-c.png');
$('.b-logistic').attr('src', '/img/benefit-logistic-g.png');
});
$('.b-conts2').on('click', function(e) {
e.preventDefault();
$(this).addClass('green').siblings().removeClass('green');
$('.b-cost').attr('src', '/img/benefit-lowcost-c.png');
$('.b-logistic').attr('src', '/img/benefit-logistic-g.png');
});
});
ul {
width: 200px;
}
li {
background-color: #ccc;
}
.green {
background-color: #9c9;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="slidePager">
<li class="col-md-2 b-conts1">
<a href="#" data-slide-index="0">
<img src="img/benefit-lowcost-g.png" class="b-cost" alt="low cost icon">
</a>
</li>
<li class="col-md-2 b-conts2">
<a href="#" data-slide-index="1">
<img src="img/benefit-logistic-g.png" class="b-logistic" alt="logistics icon">
</a>
</li>
</ul>
您可以这样修改您的代码:
通过这种方式,您只需修改图像 src(s),因此无需使用所有图像的 src(s) 填充 js 文件,也无需从元素中单击 add/remove
.green
class 和将 desire src 设置为图像元素,并检查 siblings()
。从单击的元素中删除 .green
将执行相同但相反的操作。
jQuery:
$(function(e){
$("li[class*='b-conts']").on('click', function(e){//[class^="b-conts"]
e.preventDefault();
if($(this).hasClass('green')){
$(this).removeClass('green');
var source = $(this).find('img').attr('src');
source = source.slice(0,-5) + 'g.png';
$(this).find('img').attr('src', source);
} else {
$(this).addClass('green');
$(this).siblings().each(function(){
if($(this).hasClass('green')){
$(this).removeClass('green');
var source = $(this).find('img').attr('src');
source = source.slice(0,-5) + 'g.png';
$(this).find('img').attr('src', source);
}
});
var source = $(this).find('img').attr('src');
source = source.slice(0,-5) + 'c.png';
$(this).find('img').attr('src', source);
}
});
});