Reputation: 437
My goal is to be able to highlight a cell when clicked and un-highlight when clicked again.
Each row can have only one cell highlighted.
Below is my attempted code and here is the fiddle.
Thanks.
HTML:
<div class="hws-css-filter" >
<div class="hws-css-filter-tr">
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
</div>
<div class="hws-css-filter-tr">
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
</div>
</div>
jQuery
$('.hws-css-filter-td').click(function () {
var theTable = $(this).closest('.hws-css-filter-tr');
$(theTable).each(function () {
$(this).css("background-color", "");
});
$(this).css("background-color", "blue");
});
Upvotes: 1
Views: 305
Reputation: 20750
Remove the background color of all siblings first like following.
$('.hws-css-filter-td').click(function() {
$(this).siblings().css("background-color", "");
$(this).css("background-color", "blue");
});
.hws-css-filter {
display: table;
margin: auto;
vertical-align: middle;
}
.hws-css-filter-tr {
display: table-row;
padding: 0;
margin: 0;
}
.hws-css-filter-td {
display: table-cell;
border: 1px solid #000;
width: 15px;
height: 15px;
line-height: 15px;
text-align: center;
vertical-align: middle;
padding: 0;
margin: 0;
font-family: monospace;
font-size: 10px;
text-transform: uppercase;
cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="hws-css-filter">
<div class="hws-css-filter-tr">
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
</div>
<div class="hws-css-filter-tr">
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
</div>
<div class="hws-css-filter-tr">
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
</div>
</div>
UPDATE: To select unselected.
$('.hws-css-filter-td').click(function() {
$(this).siblings().removeClass('selected');
$(this).toggleClass('selected');
});
.hws-css-filter {
display: table;
margin: auto;
vertical-align: middle;
}
.hws-css-filter-tr {
display: table-row;
padding: 0;
margin: 0;
}
.hws-css-filter-td {
display: table-cell;
border: 1px solid #000;
width: 15px;
height: 15px;
line-height: 15px;
text-align: center;
vertical-align: middle;
padding: 0;
margin: 0;
font-family: monospace;
font-size: 10px;
text-transform: uppercase;
cursor: pointer;
}
.selected {
background-color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="hws-css-filter">
<div class="hws-css-filter-tr">
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
</div>
<div class="hws-css-filter-tr">
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
</div>
<div class="hws-css-filter-tr">
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
</div>
</div>
Upvotes: 4
Reputation: 3693
Based on Figor's answer but also with toggling the highlighted cell https://jsfiddle.net/dwsL9z63/5/
$('.hws-css-filter-td').click(function () {
if($(this).hasClass("cell_highlight")){
$(this).removeClass("cell_highlight");
}
else{
$(this).addClass("cell_highlight");
}
$(this).siblings().removeClass("cell_highlight");
});
Upvotes: 0
Reputation: 12379
This will satisfy all of your requests:
$('.hws-css-filter-td').on('click', function() {
var $this = $(this);
if ($this.hasClass('blue-highlight')) {
$this.removeClass('blue-highlight');
} else {
$this.addClass('blue-highlight');
$this.siblings().removeClass('blue-highlight');
}
});
.hws-css-filter-td {
border: solid 1px #000;
height: 25px;
width: 25px;
float: left;
}
.hws-css-filter-tr {
clear: left;
}
.blue-highlight {
background-color: blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="hws-css-filter" >
<div class="hws-css-filter-tr">
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
</div>
<div class="hws-css-filter-tr">
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
<div class="hws-css-filter-td"></div>
</div>
</div>
Upvotes: 0
Reputation: 4390
To better manage cell formatting, create a new style for highlighted cells
.cell_highlight{
background-color: blue;
}
and set the jQuery event:
$('.hws-css-filter-td').click(function () {
$(this).siblings().removeClass("cell_highlight");
$(this).addClass("cell_highlight");
});
Upvotes: 1