Reputation: 7621
Each row has 3 images but one of those 3 images have a class active.
.active{border: 1px solid red;}
Active image has border around it (by class active). Two images have np border (class empty)
All I want, onclick remove the border from currently active image and add to the one that is clicked.
I tried all of these none worked:
$('#' + clkdImgId + ' img').parent().children('.active').removeClass('active'); // fails;
$('#' + clkdImgId + ' img').siblings().find("img.active").hide(); //fails
$('#' + clkdImgId + ' img').closest('.active').removeClass('active');//fails
$('#' + clkdImgId + ' img').closest('.image').children('.active').hide();//fails
$('#' + clkdImgId + ' img').closest('img.active').removeClass('active');//fails
$('#' + clkdImgId + ' img').closest('.active').hide();//fails
function setBrder(rowId, imgId)
{
var clkdImgId = 'img' + rowId + imgId;//this gives me img12, img13 etc correctly
//set class on the clicked
$('#' + clkdImgId + ' img').addClass('active');// this works
$('#' + clkdImgId + ' img').parent().children('.active').removeClass('active'); // fails;
$('#' + clkdImgId + ' img').siblings().find("img.active").hide(); //fails
$('#' + clkdImgId + ' img').closest('.active').removeClass('active');//fails
$('#' + clkdImgId + ' img').closest('.image').children('.active').hide();//fails
$('#' + clkdImgId + ' img').closest('img.active').removeClass('active');//fails
$('#' + clkdImgId + ' img').closest('.active').hide();//fails
}
HTMLs:
<table><tr><td>
<div id="img11" class="image">
<img class="active" src=".."> <- REMOVE this .active
</div>
<div id="img12" class="image">
<img class="" src=".."> <- ADD HERE IF THIS CLICKED
<div onclick="setBrder('1', 2);" class="overlay">Set</div>
</div>
<div id="img13" class="image">
<img class="" src="..">
<div onclick="setBrder('1', 3);" class="overlay">Set</div>
</div>
</td></tr>
<tr><td>
<div id="img11" class="image">
<img class="" src="..">
<div onclick="setBrder('2', 1);" class="overlay">Set</div>
</div>
<div id="img12" class="image">
<img class="active" src="..">
</div>
<div id="img13" class="image">
<img class="" src="..">
<div onclick="setBrder('2', 3);" class="overlay">Set</div>
</div>
</td></tr>
Upvotes: 1
Views: 2795
Reputation: 300
Clear all active class then add it to the one you clicked:
$('.overlay').on('click', function() {
$('img').removeClass( "active" );
$(this).parent().find('img').addClass("active");
});
Upvotes: 1
Reputation: 38112
You don't need to have that complicated structure and redundant code like that, just do like this:
HTML
<table>
<tr>
<td>
<div id="img11" class="image">
<img class="active" src=".."/>
</div>
<div id="img12" class="image">
<img class="" src=".."/>
<div class="overlay">
Set
</div>
</div>
<div id="img13" class="image">
<img class="" src=".."/>
<div class="overlay">
Set
</div>
</div>
</td>
</tr>
<tr>
<td>
<div id="img11" class="image">
<img class="" src=".."/>
<div class="overlay">
Set
</div>
</div>
<div id="img12" class="image">
<img class="active" src=".."/>
</div>
<div id="img13" class="image /">
<img class="" src=".."/>
<div class="overlay">
Set
</div>
</div>
</td>
</tr>
</table>
jQuery
$('.overlay').click(function() {
$('.image img').removeClass('active');
$(this).prev().addClass('active');
})
Upvotes: 0
Reputation: 388436
Looks like clkdImgId
is the id of the div
element, so you need to find the img
elements inside the sibling elements of clkdImgId
element
$('#' + clkdImgId).siblings().find('img').removeClass('active');
Demo: Fiddle
Upvotes: 0
Reputation: 26352
try this, you can remove all active classes and then add class to current clicked element
$(document).on('click','.image',function(){
$(this).parent().find('img').removeClass('active');
$(this).addClass('active');
});
Upvotes: 1